2014-03-12 27 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