为 Java 中的现有二进制协议生成解析器
Generate a parser for an existing binary protocol in Java
我必须实现现有二进制协议的高性能 Java 客户端。我会使用 Netty。然而,由于协议很复杂(许多消息类型具有许多字段),我想将 netty 代码与解析代码分开,并从以更高抽象描述该协议的文档中生成该协议的解析器。类似于 Google 的 Protocol Buffers。不幸的是,我似乎无法使用 protobuf,因为我的协议采用不同的二进制有线格式。有什么建议么?
我自己没试过,但我想你可能正在寻找 the java binary block parser
这是官方自述文件中的一个示例,展示了如何使用高级 DSL 来解析 TCP header 的结构:
final JBBPParser tcpParser = JBBPParser.prepare(
"skip:34; // skip bytes till the frame\n"
+ "ushort SourcePort;"
+ "ushort DestinationPort;"
+ "int SequenceNumber;"
+ "int AcknowledgementNumber;"
+ "bit:1 NONCE;"
+ "bit:3 RESERVED;"
+ "bit:4 HLEN;"
+ "bit:1 FIN;"
+ "bit:1 SYN;"
+ "bit:1 RST;"
+ "bit:1 PSH;"
+ "bit:1 ACK;"
+ "bit:1 URG;"
+ "bit:1 ECNECHO;"
+ "bit:1 CWR;"
+ "ushort WindowSize;"
+ "ushort TCPCheckSum;"
+ "ushort UrgentPointer;"
+ "byte [$$-34-HLEN*4] Option;"
+ "byte [_] Data;"
);
final JBBPFieldStruct result = pngParser.parse(tcpFrameStream);
我必须实现现有二进制协议的高性能 Java 客户端。我会使用 Netty。然而,由于协议很复杂(许多消息类型具有许多字段),我想将 netty 代码与解析代码分开,并从以更高抽象描述该协议的文档中生成该协议的解析器。类似于 Google 的 Protocol Buffers。不幸的是,我似乎无法使用 protobuf,因为我的协议采用不同的二进制有线格式。有什么建议么?
我自己没试过,但我想你可能正在寻找 the java binary block parser
这是官方自述文件中的一个示例,展示了如何使用高级 DSL 来解析 TCP header 的结构:
final JBBPParser tcpParser = JBBPParser.prepare(
"skip:34; // skip bytes till the frame\n"
+ "ushort SourcePort;"
+ "ushort DestinationPort;"
+ "int SequenceNumber;"
+ "int AcknowledgementNumber;"
+ "bit:1 NONCE;"
+ "bit:3 RESERVED;"
+ "bit:4 HLEN;"
+ "bit:1 FIN;"
+ "bit:1 SYN;"
+ "bit:1 RST;"
+ "bit:1 PSH;"
+ "bit:1 ACK;"
+ "bit:1 URG;"
+ "bit:1 ECNECHO;"
+ "bit:1 CWR;"
+ "ushort WindowSize;"
+ "ushort TCPCheckSum;"
+ "ushort UrgentPointer;"
+ "byte [$$-34-HLEN*4] Option;"
+ "byte [_] Data;"
);
final JBBPFieldStruct result = pngParser.parse(tcpFrameStream);