使用Java';s ByteBuffer复制Python';s结构包

使用Java';s ByteBuffer复制Python';s结构包,java,python,Java,Python,首先,我看到。。。这是一个澄清 我对Java还不熟悉,并尝试镜像我在Python中使用的一些技术。我正在尝试通过网络发送数据,并希望确保我知道它是什么样子。在python中,我将使用struct.pack。例如: data = struct.pack('i', 10) data += "Some string" data += struct.pack('i', 500) print(data) 将以字节顺序打印填充的部分,中间用明文表示字符串。 我试着用ByteBuffer复制这一点: St

首先,我看到。。。这是一个澄清

我对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());

我不明白哪一部分?

听起来比你真正需要的更复杂

我建议使用
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);
这避免了通过直接写入流来创建比需要更多的对象。

如果使用,代码将更容易

JBBPOut.BeginBin().Int(10).Utf8("Some string").Int(500).End().toByteArray();