协议缓冲区-C++中的Protobuf ParseDimitedFrom实现

protocol buffers - Protobuf ParseDelimitedFrom implementation in C++

本文关键字:ParseDimitedFrom 实现 Protobuf 中的 缓冲区 -C++ 协议      更新时间:2023-10-16

C#Publisher正在使用"writeDelimitedTo"API通过套接字以自定义protobuff格式发布continuos市场数据消息。我必须阅读C++中的所有消息并将其去参数化。下面是我的代码。由于C++没有"parseDelimitedFrom",所以在浏览了论坛中的多个建议后,我们编写了如下代码。

现在我的问题是-参考下面的代码,如果第一条消息大小小于1024,那么在第一次迭代中,我将获得第一条消息的完整流和第二条消息的部分流。在反序列化第一条消息之后,我如何从套接字读取第二条消息的剩余流,并将其与我在上一次迭代中读取的流合并?

EDIT:对"分隔"格式的支持现在是官方protobuf库的一部分。下面的帖子是在添加之前发布的。

我在这里用C++编写了parseDelimitedFromwriteDelimitedTo的最佳有效版本(Uncompressedreadwrite方法(:

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

相关文章:
  • 没有找到相关文章