Java 中Protocol Buffers 分隔I/O 函數的C 等效項
在Protocol Buffers 中,在訊息之前加上長度前綴讀取和發送訊息至關重要從文件寫入多個訊息。雖然 Java 為此目的提供了「定界」I/O 函數(例如 parseDelimitedFrom、mergeDelimitedFrom、writeDelimitedTo),但 C 缺乏等效函數。
Google 推薦
Google 推薦在 C 中手動為訊息附加長度前綴。這涉及到:
但是,這種方法缺乏最佳化,可能會失敗輸入大於64MB。
最佳化的 C 實作
隨後,前 Google protobuf 函式庫作者開發並共享了最佳化的 C 實作。這些實作包括:
實作細節
writeDelimitedTo 函數會為每個訊息建立一個新的CodedOutputStream 並使用SerializeWithCachedSizes 方法將其序列化。如果訊息適合一個緩衝區,則使用更快的 SerializeWithCachedSizesToArray 方法。 readDelimitedFrom 函數建立一個新的 CodedInputStream 並使用 PushLimit 方法對每個訊息施加大小限制。然後,它使用 MergeFromCodedStream 方法解析訊息並驗證整個訊息是否已被消耗。可用性
這些最佳化的 C 實作不是官方 protobuf 函式庫的一部分。但是,它們可以在各種第三方存儲庫中找到,或者使用提供的程式碼片段手動實現。以上是如何在 C 中實現協議緩衝區定界 I/O:缺少的功能和潛在的最佳化的詳細內容。更多資訊請關注PHP中文網其他相關文章!