首頁 >後端開發 >C++ >C 協定緩衝區定界 I/O:是否有與 Java 等效的函數?

C 協定緩衝區定界 I/O:是否有與 Java 等效的函數?

Barbara Streisand
Barbara Streisand原創
2024-12-05 00:32:12209瀏覽

C   Protocol Buffer Delimited I/O: Are There Java-Equivalent Functions?

Protocol Buffers 分隔的 I/O 函數:C 等效項?

在嘗試使用 C 和 Java 從檔案中讀取和寫入多個 Protocol Buffers 訊息時,它有據觀察,Java 為此目的提供了一組「定界」I/O 函數。然而,C 是否提供類似的功能仍不確定。

Java API 函數是:

  • parseDelimitedFrom
  • mergeDelimitedFrom
  • write
  • 從版本3.3.0 開始,Google 通過在google/protobuf/util/delimited_message_util.h 中引入以下C 等效項解決了此問題:

Java 大小的有線格式前綴

對於那些尋求在 C中解析大小前綴訊息而不使用官方的人庫,傳輸格式如下:
bool writeDelimitedTo(
    const google::protobuf::MessageLite& message,
    google::protobuf::io::ZeroCopyOutputStream* rawOutput) {
  // Code to write delimited messages
}

bool readDelimitedFrom(
    google::protobuf::io::ZeroCopyInputStream* rawInput,
    google::protobuf::MessageLite* message) {
  // Code to read delimited messages
}

訊息的大小以 32 位元變長整數表示。

在大小後面加上一個位元組以確保向後相容性。
  1. 訊息資料附加在大小和相容性之後byte.
  2. 最佳化
  3. 提供的 C 實作包括其他回應中缺少的最佳化。這些最佳化確保功能:

在 64MB 輸入後不會失敗。

對每個訊息強制執行 64MB 限制。
  • 使用更快的直接-盡可能到陣列序列化路徑。

以上是C 協定緩衝區定界 I/O:是否有與 Java 等效的函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn