2016-06-22 42 views
2

我必須實現現有二進制協議的高性能Java客戶端。我將使用Netty。然而,由於協議是複雜的(許多字段有很多消息類型),我想從解析代碼中分離出netty代碼,並從更高層抽象中的文檔描述該協議的文檔生成此協議的解析器。類似於Google協議緩衝區所做的那樣。不幸的是,似乎我不能使用protobuf,因爲我的協議採用不同的二進制線格式。有什麼建議麼?爲Java中的現有二進制協議生成解析器

回答

2

我還沒有嘗試過自己,但我想你可能會尋找the java binary block parser

下面是一個例子,形成正式的自述,顯示它如何可以用於使用高解析TCP頭的結構級別的DSL:

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

是的!謝謝麥芽,看起來像我正在尋找的圖書館。 –