java - 在字节缓冲区中处理不同数据类型的最佳实践是什么

标签 java bytebuffer

所以我有存储数据包的时间序列,如下序列:

第一个数据包:

    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/

相关文章:

java - spring-data-cassandra 设置一致性级别

java - 如何在 Android 上 pretty-print JSON 原始数据

java - Selenium Webdriver 多选下拉列表 ElementNotVisibleException

java - Cassandra,使用 ByteBufferUtil (org.apache.cassandra.utils) 读取列类型 map<> 的值

java - 为什么在 ByteBuffer 中可以直接分配字节,而不能在 FloatBuffer 中分配 float

Java 泛型和集合集

java - 解释一下 Java 中循环执行后的 println 和 print 语句?

java - ByteBuffer回收类

java - 如何构造一个包含多种数据类型值的字节数组?

java - 在 Java 中快速删除(不清除)一个 ByteBuffer