Java 中Protocol Buffers 分隔I/O 函數的C 等效項
在C 中,沒有與「分隔」I 直接等效的函數/O 函數在Java 的Protocol Buffers API 版本2.1.0 中引入。這些函數允許讀取和寫入附加長度前綴的多個 Protocol Buffers 訊息。
Java 分隔 I/O 函數的連線格式
Java「分隔」I/ O 函數使用 Google 未記錄的有線格式。然而,C 和 Java protobuf 函式庫的作者提供了類似功能的非官方實作:
<code class="cpp">bool writeDelimitedTo( const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput) { // Write the size. const int size = message.ByteSize(); output.WriteVarint32(size); // Serialize the message. uint8_t* buffer = output.GetDirectBufferForNBytesAndAdvance(size); if (buffer != NULL) { message.SerializeWithCachedSizesToArray(buffer); } else { message.SerializeWithCachedSizes(&output); } return true; } bool readDelimitedFrom( google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message) { // Read the size. uint32_t size; if (!input.ReadVarint32(&size)) return false; // Limit the stream to the size of the message. google::protobuf::io::CodedInputStream::Limit limit = input.PushLimit(size); // Parse the message. if (!message->MergeFromCodedStream(&input)) return false; // Verify that the entire message was consumed. if (!input.ConsumedEntireMessage()) return false; // Release the limit. input.PopLimit(limit); return true; }</code>
這些實作確保 64MB 大小限制單獨應用於每個訊息,而不是整個流。此外,當訊息大小相對較小時,他們利用最佳化來提高效能。
以上是如何在 C 語言中為 Protocol Buffer 實作定界 I/O 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!