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

标签 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());

哪一部分我不明白?

最佳答案

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

我建议使用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);

这可以避免通过直接写入流来创建超出需要的对象。

关于java - 使用Java的ByteBuffer复制Python的struct.pack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340650/

相关文章:

python - 导入错误;在 PyCharm 中使用 Python 3.5 安装 Reportlab 3.4 时出现问题

python - django - 在一行中向字典添加多个对象

java - 设置ListView适配器时Android应用程序保持强制关闭

java - SWT:更好地使用新的 display.shell 方法?

java - VM 启动后启动 Instrumentation Agent

Java-读取文本文件并将其存储为数组

python - 绘制 numpy 数组 : setting axis scale

python - pandas 的高效 STAR 选择

java - 如何使列表线程安全以进行序列化?

python - 使用 Python Keras 进行层标准化