![](/img/trans.png)
[英]Google Protocol Buffers: parseDelimitedFrom and writeDelimitedTo for C++
[英]Protobuf ParseDelimitedFrom implementation in C++
C#Publisher正在使用“ writeDelimitedTo” API通过套接字以自定义原型格式发布持续市场消息。 我必须阅读C ++中的所有消息并对其进行反序列化。 下面是我的代码。 由于C ++没有“ parseDelimitedFrom”,因此在此论坛中经过多次建议后,已编写了如下所示的代码。
现在我的问题是-参考下面的代码,如果第一个消息的大小小于1024,则在第一次迭代中,我将拥有第一条消息的完整流和第二条消息的部分流。 反序列化第一条消息后,如何从套接字读取第二条消息的其余流并将其与上一次迭代中读取的流合并?
编辑: 对“定界”格式的支持现在是官方protobuf库的一部分。 下面的帖子早于其添加。
我写的优化高效的版本parseDelimitedFrom
和writeDelimitedTo
在C ++这里(的read
和write
的方法Uncompressed
):
随时复制。
这些实现从ZeroCopyInputStream
/ ZeroCopyOutputStream
读取/写入。(嗯,出于某种原因,我的write
被声明为使用FileOutputStream
,但是您应该能够将其更改为ZeroCopyOutputStream
。)
因此,您需要创建一个从您的StreamSocket
读取的ZeroCopyInputStream
,然后将其传递给我的read()
。
看起来StreamSocket
是一个经典的复制读取接口。 因此,应该将CopyingInputStreamAdaptor
用作ZeroCopyInputStream
,并包装从StreamSocket
读取的CopyingInputStream
的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.