【发布时间】:2026-01-17 12:45:01
【问题描述】:
问题: 我需要从具有固定数据包格式定义的电子设备实现网络输入阅读器。它有一个页眉、页脚和数据体。数据包中的字段以位为单位定义。
示例: 字段 sequence_number 变量是编号为 8 到 31 的位,而 ack_status 是位 32。如何创建自定义序列化函数,以便可以将 java 对象与从数据包中读取的 byte[] 进行转换?
在 32 位数据包中
StartOfPacketHeader 4bits
CommandCode 4bits
SequenceNumber 23bits
AckStatus 1bit
如何使用 byte[] 构造函数和 toBytes() 方法为这个对象创建一个 Java 包装类。
使用可序列化接口无法控制单个数据的大小。数据大小可能是奇数,例如 3 位或 18 位变量。我无法以位为单位指定变量的长度。
到目前为止我做了什么:
源实际上发送无符号整数,这意味着 Java int 类型无法处理其整个范围。我需要定义所有数据类型,只要处理所有情况。我已经使用 BitSet 类来执行 byte[] 到 Long 的转换,但它太繁琐和令人困惑,因为 bitset 默认将位顺序反转为 Little Endian。
总结:
如何以最有效的方式将我从网络读取的字节[] 转换为我的对象,反之亦然,并为每个字段提供自定义定义?
【问题讨论】:
标签: java serialization deserialization ethernet