2014-03-12 76 views
1

C#Publisher使用“writeDelimitedTo”API通过套接字以自定义protobuff格式发布连续性市场数据消息。我必须阅读C++中的所有消息并将其删除。以下是我的代码。由于C++没有“parseDelimitedFrom”,因此在通过本论坛的多个建议后,编写了如下所示的代码。Protobuf ParseDelimited从C++中实现

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

回答

4

我写的parseDelimitedFromwriteDelimitedTo最佳效率的版本C++这里(的Uncompressedreadwrite方法):

https://github.com/kentonv/capnproto/blob/master/c%2B%2B/src/capnp/benchmark/protobuf-common.h#L81

随意复制。

这些实现读取/写入ZeroCopyInputStream/ZeroCopyOutputStream。(嗯,由于某种原因,我write声明使用FileOutputStream,但你应该能够只需更改到ZeroCopyOutputStream

所以,你将需要创建一个ZeroCopyInputStream从您的StreamSocket读取,然后将其传递到我的read()

看起来像StreamSocket是一个经典的复制读取接口。因此,您应该使用CopyingInputStreamAdaptor作为您的ZeroCopyInputStream,封装从您的StreamSocket中读取的CopyingInputStream的实施。

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.io.zero_copy_stream_impl_lite#CopyingInputStreamAdaptor

+0

嗨Kenton,谢谢您的回复。 – LearningPython

+0

@RakeshKumar - 感谢某人回答的最佳方式是接受和/或向上投票。 :) –

+0

令人敬畏的代码是404没有在github找到:( – ZFY