协议缓冲区-C++中的Protobuf ParseDimitedFrom实现
protocol buffers - Protobuf ParseDelimitedFrom implementation in C++
C#Publisher正在使用"writeDelimitedTo"API通过套接字以自定义protobuff格式发布continuos市场数据消息。我必须阅读C++中的所有消息并将其去参数化。下面是我的代码。由于C++没有"parseDelimitedFrom",所以在浏览了论坛中的多个建议后,我们编写了如下代码。
现在我的问题是-参考下面的代码,如果第一条消息大小小于1024,那么在第一次迭代中,我将获得第一条消息的完整流和第二条消息的部分流。在反序列化第一条消息之后,我如何从套接字读取第二条消息的剩余流,并将其与我在上一次迭代中读取的流合并?
EDIT:对"分隔"格式的支持现在是官方protobuf库的一部分。下面的帖子是在添加之前发布的。
我在这里用C++编写了parseDelimitedFrom
和writeDelimitedTo
的最佳有效版本(Uncompressed
的read
和write
方法(:
https://github.com/capnproto/capnproto/blob/06a7136708955d91f8ddc1fa3d54e620eacba13e/c%2B%2B/src/benchmark/protobuf-common.h#L101
请随意复制。
这些实现从ZeroCopyInputStream
/ZeroCopyOutputStream
读取/写入。(嗯,出于某种原因,我的write
被声明为使用FileOutputStream
,但您应该可以将其更改为ZeroCopyOutputStream
。(
因此,您需要创建一个从StreamSocket
读取的ZeroCopyInputStream
,然后将其传递给我的read()
。
看起来StreamSocket
是一个经典的复制读取接口。因此,您应该使用CopyingInputStreamAdaptor
作为ZeroCopyInputStream
,包装从StreamSocket
读取的CopyingInputStream
的实现。
https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.zero_copy_stream_impl_lite#CopyingInputStreamAdaptor
- 没有找到相关文章