2012-05-20 40 views
1

我需要在計算機之間交換protobuf網對象和文件,並試圖找出最好的方式來做到這一點。有沒有辦法讓A通知B,後面的對象是protobuf還是文件?或者,在傳輸文件時,是否有辦法知道該文件已結束,並且隨後的Byte []是否是protobuf?交錯protobuf網和文件

使用C#4.0,Visual Studio 2010中

感謝,馬尼什

回答

1

這有什麼好做的protobuf或文件,一切都與你的通訊科的協議,特別是 「框架」。這意味着:您如何在單個流中標記子消息。例如,如果這是一個原始套接字,你可能會選擇發送(所有)

  • 一條簡短的消息類型,也許一個字節:01文件,02特定文件的protobuf的消息
  • 長度前綴(通常是4個字節的網絡字節順序)
  • 有效載荷,由先前的字節數

然後沖洗和重複每個消息的。

你沒有說明你要問什麼通信,所以我可以更具體。

順便說一句,另一個辦法是把一個文件作爲一個byte []部件的protobuf消息 - 主要適用於小文件,但

+0

非常感謝。把文件放入protobuf將會很棒。根據你的經驗,protobuf可以運行的最大文件大小是多少? 「你在問什麼通訊」 - 抱歉不明白這是什麼意思。另外,什麼是安全的沖洗和重複方式? – Manish

+0

@Manish內部存儲它會想要使用一個字節[] - 所以返回的問題是:什麼是你最喜歡使用的最大的字節[]?如果你在protobuf-net之外運行它,你當然可以使用流媒體 - 對於大文件來說更好。重新「通訊」 - 我們在這裏作爲來源/目的地在說什麼?這是一個扁平的二進制文件嗎?一個插座? WCF內的東西?像MSMQ這樣的中間件?需要了解更多的上下文來提供完整的建議。 –

+0

謝謝馬克。哦,我明白了。如果我們把文件放在protobuf裏面,如果我們想要處理1MB文件,我們將不得不聲明所有protobufs的Byte [1000000]。如果文件大小不一,效率非常低。得到它了。我們只是使用套接字,想避免WCF等框架來避免臃腫。文件是普通的Word/Pdf/Excel文件。流媒體推薦的好參考將會很好。許多MSDN代碼示例混淆了首選方法的選擇。 – Manish