【发布时间】:2019-04-06 14:42:00
【问题描述】:
是否有一种规范的方式来定义 Java(以及 Kotlin 扩展)中的数据结构,该数据结构可以按照结构中定义的字节顺序序列化为字节数组或位序列?
类似于 C 中的结构体。
编辑:因此,除此之外,我想要一种简单而富有表现力的方式来定义数据结构,然后访问它的任何部分。因此,例如,在伪代码中:
DataStructure Message {
Bit newFlag;
Bit genderFlag;
Bit sizeFlag;
Bit activeFlag;
Bit[4] operation;
Byte messageSize;
Byte[] message;
}
那么我们就这样做:
Message firstMessage = new Message(1, 0, 1, 0, b'0010', 11, "Hello there");
我们可以说:
ByteArray serialisedMessage = firstMessage.toBytes();
这会给我们一个看起来像这样的数组:
[b'10100010', b'00001011', "Hello there" (but in bytes)]
那么我们可以这样做:
firstMessage.genderFlag = 1;
..然后在对象上重新运行 .toBytes。
显然,在 Java 中有上百万种类似的方法,但据我所知,语法上没有什么简单的 - 几乎任何事情都需要编写自定义序列化(而不是每个对象的对象序列化)方法。也许这是执行此操作的规范方法,但如果按照 C、Rust 和 erm、COBOL 的方式,让它更简单一些,那就太好了。
【问题讨论】:
-
它不一定是结构体,但我想在位级数据结构中标记位和字节。
-
最接近的是序列化或自定义实现
-
有很多现有的工具来设计可以高效序列化的数据结构,例如developers.google.com/protocol-buffers。没有很多工具可以让您控制确切的序列化结构。
标签: java arrays kotlin bit-manipulation byte