使用Java的ByteBuffer复制Python的struct.pack

时间:2013-08-20 16:47:44

标签: java python

首先,我看到了Java equivalent of Python's 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());

我不理解哪一部分?

2 个答案:

答案 0 :(得分:1)

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

我建议使用DataOutputStreamBufferedOutputStream

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 :(得分:0)

如果使用https://github.com/raydac/java-binary-block-parser则代码将更容易

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