如何读取协议缓冲区分隔的I / O功能

时间:2018-12-13 16:08:10

标签: php protocol-buffers

我正在尝试读取包含以长度分隔的协议缓冲区消息的文件,每个记录都是varint,用于指定消息的长度,然后是protobuf消息本身。 但是默认情况下没有办法(我可以看到)。 我使用google / protobuf 3.6.1库

但是,2.1.0版中的Java API接收了一组“定界” I / O函数,这些函数显然可以完成此任务: parseDelimitedFrom mergeDelimitedFrom

有PHP等效项吗?所以我可以用PHP解析这些消息? 不,当我使用mergeFromString方法时收到此错误
“解析期间发生错误:意外的导线类型。”

1 个答案:

答案 0 :(得分:1)

我尚未测试,但根据消息来源,这可能有效:

 $data = /* Length-prefixed protobuf data in string */;
 $input = new CodedInputStream($data);

 /* Read length prefix */
 $length = 0;
 $input->readVarint32($length);

 /* Limit the stream so that only $length bytes get parsed */
 $input->pushLimit($length);

 /* Parse the message */
 $msg = new MyMessage();
 $msg->parseFromStream($input);