Я должен реализовать высокопроизводительный Java-клиент существующего двоичного протокола. Я буду использовать Netty. Однако, поскольку протокол является сложным (многие типы сообщений со многими полями), я хотел бы отделить код нетто от кода разбора и сгенерировать синтаксический анализатор этого протокола из документа, описывающего этот протокол, в более высокой абстракции. Подобно тому, как это делается в буферах протокола Google. К сожалению, кажется, я не могу использовать protobuf, поскольку мой протокол находится в другом бинарном формате. Какие-либо предложения?Генерировать парсер для существующего двоичного протокола в Java
2
A
ответ
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);
Да! Спасибо, Мальту, который похож на библиотеку, которую я ищу. –