2010-08-26 69 views

回答

6

Protocol Buffers是一個結構化的數據序列化(和反序列化)框架。它只關心將預定義數據類型的選擇編碼到數據流中。你對該流的做法取決於你。引述維基:

如果你想 寫入多個消息發送到單個文件或流,它是由 到您跟蹤其中一個 消息結束,下開始的。 協議緩衝區連線格式不是 自定義,因此協議緩衝區 解析程序無法確定消息自己終止的位置。最簡單的 解決這個問題的辦法就是在你寫 之前寫下每條消息的大小 。當你讀取回來的消息,你讀 的大小,然後讀取字節到一個 單獨的緩衝區,然後從該緩衝區解析 。

所以是的,你可以使用它來通過套接字發送/接收多個對象,但你必須做一些額外的工作來區分每個對象流。

+0

你可以提供一個使用protobuf來處理對象流的示例嗎? – wamp 2010-08-26 03:57:17

+0

api實際上有一個類,通過編寫一些標識符字節和填充每個對象流的大小字節來幫助識別另一側的每個對象。該課程還將處理解碼。您可以在這裏看到一些非常簡短的示例代碼: http://code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.io.coded_stream.html – 2010-08-26 04:14:37

1

我不熟悉的protobuf,但the documentation說,你可以創建一個FileInputStream(然後可以用於創建CodedInputStream)使用的文件描述符。如果你在一個支持BSD套接字的系統上,你應該可以給它一個套接字文件描述符,而不是普通的套接字文件描述符。

0

協議緩衝區不處理任何周圍的網絡/文件I/O操作。您可能要考慮使用Thrift,其中包括套接字通信庫和具有序列化/反序列化的服務器庫。