在Java中是否有与Python的
struct.pack
相当的功能,允许我像这样打包和解包值?pump_on = struct.pack("IIHHI", 0, 0, 21, 96, 512)
我认为你可能需要的是一个ByteBuffer:
ByteBuffer pump_on_buf = ...
pump_on_buf.putInt(0);
pump_on_buf.putInt(0);
pump_on_buf.putShort(21);
pump_on_buf.putShort(96);
pump_on_buf.putInt(512);
byte[] pump_on = pump_on_buf.array();
buf.put(s.getBytes())
。 ByteBuffer
在最初分配缓冲区时需要指定容量。您是说这是好事还是坏事? - SimonC类似这样的:
final ByteArrayOutputStream data = new ByteArrayOutputStream();
final DataOutputStream stream = new DataOutputStream(data);
stream.writeUTF(name);
stream.writeUTF(password);
final byte[] bytes = stream.toByteArray(); // there you go
final DataInputStream stream = new DataInputStream(
new ByteArrayInputStream(bytes)
);
final String user = stream.readUTF();
final String password = stream.readUTF();
data.toByteArray()
。DataOutputStream上没有toByteArray
方法,但是可以在ByteArrayOutputStream上找到它。 - keios我开始开发一个与Python Struct非常接近的项目:java-binary-block-parser。在JBBP中,它看起来像:
JBBPOut.BeginBin().Int(0,0).Short(21,96).Int(512).End().toByteArray();
在核心Java中,最接近的功能是序列化。它将对象转换为字节序列,然后再转换回来。