Java のプロトコル バッファー区切り I/O 関数に相当する C
プロトコル バッファーでは、メッセージの前に長さのプレフィックスを追加することが、読み取りおよびファイルから複数のメッセージを書き込む。 Java にはこの目的のための「区切り付き」I/O 関数 (parseDelimitedFrom、mergeDelimitedFrom、writeDelimitedTo など) がありますが、C には同等の関数がありません。
Google の推奨
Google の推奨C でメッセージに長さのプレフィックスを手動で付加します。これには次のことが含まれます。
ただし、このアプローチには最適化が欠けており、次の場合に失敗する可能性があります。
最適化された C 実装
その後、最適化された C 実装が開発され、元 Google protobuf ライブラリ作者によって共有されました。これらの実装には次のものが含まれます。
実装の詳細
writeDelimitedTo 関数は、メッセージごとに新しい CodedOutputStream を作成し、SerializeWithCachedSizes メソッドを使用してシリアル化します。メッセージが 1 つのバッファーに収まる場合は、高速な SerializeWithCachedSizesToArray メソッドが使用されます。
readDelimitedFrom 関数は、新しい CodedInputStream を作成し、PushLimit メソッドを使用してメッセージごとのサイズ制限を課します。次に、MergeFromCodedStream メソッドを使用してメッセージを解析し、メッセージ全体が消費されたことを確認します。
可用性
これらの最適化された C 実装は、公式の protobuf ライブラリの一部ではありません。ただし、これらはさまざまなサードパーティ リポジトリで見つけることも、提供されたコード スニペットを使用して手動で実装することもできます。
以上がC でプロトコル バッファー区切り I/O を実装する方法: 欠落している機能と最適化の可能性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。