2013-08-20 6 views
0

Прежде всего, я увидел Java equivalent of Python's struct.pack? ... это разъяснение.Использование Java ByteBuffer для репликации структуры Python struct.pack

Я новичок в Java и пытаюсь отразить некоторые из тех методов, которые я использовал в Python. Я пытаюсь отправить данные по сети и хочу, чтобы я знал, как это выглядит. В python я бы использовал struct.pack. Например:

data = struct.pack('i', 10) 
data += "Some string" 
data += struct.pack('i', 500) 
print(data) 

Это будет печатать упакованные части в порядке байтов со строкой в ​​виде открытого текста посередине.

Я пытался повторить, что с ByteBuffer:

String somestring = "Some string"; 
ByteBuffer buffer = ByteBuffer.allocate(100); 
buffer.putInt(10); 
buffer.put(somestring.getbytes()); 
buffer.putInt(500); 
System.out.println(buffer.array()); 

Какую часть я не понимая?

ответ

1

Это звучит сложнее, чем вам действительно нужно.

Я предлагаю использовать DataOutputStream и BufferedOutputStream:

DataOutputStream dos = new DataOutputStream(
         new BufferedOutputStream(socket.getOutputStream())); 
dos.writeInt(50); 
dos.writeUTF("some string"); // this includes a 16-bit unsigned length 
dos.writeInt(500); 

Это позволяет избежать создания нескольких объектов, чем требуется в письменной форме непосредственно в поток.

+1

Бросьте dos.flush() и работал отлично! – cylus

Смежные вопросы