在Java中为现有二进制协议生成解析器

时间:2016-06-22 14:33:48

标签: java network-programming netty protocol-buffers

我必须实现现有二进制协议的高性能Java客户端。我会用Netty。然而,由于协议很复杂(许多字段有很多字段),我想将netty代码与解析代码分开,并从更高抽象中描述该协议的文档中生成该协议的解析器。类似于谷歌的协议缓冲区。不幸的是,似乎我不能使用protobuf,因为我的协议采用不同的二进制线格式。有什么建议?

1 个答案:

答案 0 :(得分:2)

我自己没有尝试过,但我认为您可能正在寻找the java binary block parser

这是一个官方自述文件的示例,展示了如何使用高级DSL解析TCP标头的结构:

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);