Создание объекта, подобного байтбуферу, в Ruby - PullRequest
1 голос
/ 23 августа 2011

Мне нужно создать объект в стиле Bytebuffer в Ruby. Вот мой пример в JAVA

int ADD_BYTES_FOR_MSG_LENGTH = 4;

Integer messageBodySize = new Integer(messageBody.getBytes().length);
byte[] messageHeader = ByteBuffer.allocate(ADD_BYTES_FOR_MSG_LENGTH).putInt(messageBodySize).array();

messageToSend = new byte[messageHeader.length + messageBodySize];

System.arraycopy(messageHeader, 0, messageToSend, 0, messageHeader.length);
System.arraycopy(messageBody.getBytes(), 0, messageToSend, messageHeader.length, messageBodySize);

Я создаю сообщение, начиная с 4 байтов, где находится размер части тела сообщения, а затем фактическое сообщение. Я не знаю, как это сделать в Ruby, поэтому, пожалуйста, помогите.

1 Ответ

3 голосов
/ 23 августа 2011

Я сделал это для Steam Condenser , используя расширенную версию StringIO.

Хотя я не использую какие-либо put* методы, их можно легко реализовать, как, например,:

class StringIO

  def put_int(i)
    write [i].pack('v')
  end

end

Вы можете взглянуть на код , документацию исходного класса и мои расширения .

...