所以我有存储数据包的时间序列,如下序列:
第一个数据包:
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer bt = ByteBuffer.allocateDirect(1024);
...
bt.putChar('X');
bt.putChar('X');
bt.putChar('X');
bt.putChar('X');
bt.putChar('E');
bt.putLong(new Date().getTime());
bt.putDouble(0.8546324324234d);
第二个数据包:
bt.putChar('X');
bt.putChar('X');
bt.putChar('X');
bt.putChar('X');
bt.putChar('E');
bt.putLong(new Date().getTime());
bt.putDouble(0.8546324324234d);
第 n 个数据包:
bt.putChar('X');
bt.putChar('X');
bt.putChar('X');
bt.putChar('X');
bt.putChar('E');
bt.putLong(new Date().getTime());
bt.putDouble(0.8546324324234d);
正如您所看到的,所有数据包都具有相同的序列,但我有一个情况,我时不时地在两个数据包之间收到随机字符串:
bt.putChar('R');
bt.putChar('A');
bt.putChar('N');
bt.putChar('D');
所以我认为我应该使用某种字节顺序标记作为前导字节来注释这个字符串。类似这样的事情:
public static final byte[] BYTE_MARK = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
但它也可以被识别为双 0.0 值。您的建议或最佳实践是什么,我可以标记此字符串,以便将其与数据包分开?
最佳答案
正常的做法是,以类型标记和最终长度信息开始各种数据包。以 TCP/IP 的包定义为例。
最好的实践是非常主观的。我个人最好的办法是,根本不关心这种低级的东西,并序列化格式良好的对象(一个用于包含 long 和 double 的 5 个字符,一个用于中间字符串。)
关于java - 在字节缓冲区中处理不同数据类型的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36306377/