2

传入消息的格式

  • 第一个字节是固定的
  • protobuf 消息作为标头(9 个字节)
  • 内容角色中的 protobuf 消息(4 个字节)

为了灵活性,我在一个网络数据包中实现了两个 protobuf 消息。

这就是我试图解析消息的方式:

ByteArrayInputStream is = new ByteArrayInputStream(buf.array());
System.out.println(is.available());
is.skip(1);
System.out.println(is.available());

MessageHeader header = MessageHeader.parseFrom(is);
System.out.println(is.available());

输出是

  • 14
  • 13
  • 0

所以问题是 parseFrom 尝试读取 inputStream 直到结束,并且一旦完成第一次 protobuf 读取就不会停止。

解析具有这种格式的消息的最佳方法是什么?

4

1 回答 1

3

当我从现在开始写入和解析时,我使用writeDelimitedTo并且parseDelimitedFrom它可以工作。

于 2012-09-07T06:48:29.820 回答