【问题标题】:Generate a parser for an existing binary protocol in Java在 Java 中为现有的二进制协议生成解析器
【发布时间】:2016-06-22 14:33:47
【问题描述】:

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

【问题讨论】:

    标签: java network-programming netty protocol-buffers


    【解决方案1】:

    我自己没试过,但我想你可能正在寻找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);
    

    【讨论】:

    • 是的!谢谢 Malt,它看起来像我正在寻找的图书馆。
    猜你喜欢
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2012-01-21
    相关资源
    最近更新 更多