【发布时间】:2022-01-01 06:01:14
【问题描述】:
我正在研究专有的 TCP 协议。该协议发送和接收具有特定字节序列的消息。
我应该遵守这个协议,我不能改变它。
所以我的输入/输出结果是这样的:\x01\x08\x00\x01\x00\x00\x01\xFF
\x01 - Message type
\x01 - Message type
\x00\x01 - Length
\x00\x00\x01 - Transaction
\xFF - Body
字段的顺序很重要。而且我只想要序列化中字段的值,而不想要类的结构。
我正在开发一个使用此协议的 Java 控制器,我曾想过在特定类中定义消息结构并序列化/反序列化它们,但我很天真。
首先我尝试了 ObjectOutputStream,但是当我只需要特定顺序的值时,它会输出对象的整个结构。
有人已经遇到过这个问题:
Java - Object to Fixed Byte Array
并通过专门的 Marshaller 解决。
但我正在寻找更灵活的解决方案。
对于文本序列化和反序列化我发现:
http://jeyben.github.io/fixedformat4j/
带有注释的那个定义了该行的模式。但它输出一个字符串,而不是byte[]。因此 1 的输出类似于“1”,根据编码的不同表示不同,并且通常具有更多字节。
我正在搜索的是给定我的类属性的顺序的东西,它将把每个属性转换成一堆字节(基于内部表示)并将它们附加到byte[]。
您知道一些用于此目的的库吗?
还是一种简单的方法来做到这一点,而无需为我的每个实体编写序列化算法?
【问题讨论】:
标签: java serialization tcp bytebuffer