【发布时间】:2016-09-15 13:24:22
【问题描述】:
我目前正在对 mmorpg 的二进制网络协议进行反向工程。 我正在用java实现协议。
对于每个数据包类型, 我将创建一个代表二进制数据的类。
例如,Chat-Packet ("asd")
header = 0c75
03 00 61 73 64 00 . . a s d .
java代码:
public class Chat {
private short length;
private String msg;
}
是否有一个库可以将字节数组直接反序列化到对象中。基本上类似于 Jackson 或 OrmLite 用于二进制数据。
有人知道是否有可以使用的库吗? 我已经在这里和谷歌上搜索过,但没有找到我要找的东西。 我什至开始编写自己的序列化器。
【问题讨论】:
-
Protocol buffers 能帮到你吗?
-
是的,我已经看过协议缓冲区,但我找不到任何关于它们如何序列化数据的信息。我可以控制填充字段的顺序至关重要,因为我无法控制从服务器接收的数据。我也不太喜欢定义我的数据结构然后必须将其编译成 java 的想法。
-
服务器需要在他们的一端和你的一端实现它,以便它从同一张赞美诗中唱出来,所以那是窗外的。来自服务器的数据是二进制的吗?无论哪种方式,您都需要实现某种类型的字节数组,有一个陷阱,您如何知道数据包数据的开始/结束?
-
是的,来自服务器的数据是二进制的。每个数据包都以它的长度为前缀,所以这不是问题。但我无法更改服务器的协议,因为协议已经存在,我只是对其进行逆向工程
-
如果是二进制数据,您可能不想将其存储在
String中。将二进制数据传递给类的构造函数并在那里解析数据。
标签: java serialization binary jackson ormlite