我正在尝试读取包含以长度分隔的协议缓冲区消息的文件,每个记录都是varint,用于指定消息的长度,然后是protobuf消息本身。 但是默认情况下没有办法(我可以看到)。 我使用google / protobuf 3.6.1库
但是,2.1.0版中的Java API接收了一组“定界” I / O函数,这些函数显然可以完成此任务: parseDelimitedFrom mergeDelimitedFrom
有PHP等效项吗?所以我可以用PHP解析这些消息?
不,当我使用mergeFromString方法时收到此错误
“解析期间发生错误:意外的导线类型。”
答案 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);