2011-07-07 24 views
5

protobufコンパイラとクライアントライブラリのバージョン間で、プロトコルバッファのシリアル化されたデータフォーマットが一定のままであるかどうかは疑問でした。protobufバージョン間のデータフォーマットの互換性

つまり、私はPython、Java、およびC++クラスを生成するために同じコンパイラバージョンを使用する必要がありますか?また、これらのクライアントはすべて同じバージョンのprotobufライブラリを使用する必要がありますか?

This post私の質問ですが、その答えは、OPのprotobufバージョンに固有のものです。

答えて

3

はい、それはかなり考えです。どのライブラリを使用するかは、仕様に従う限り重要です。 とわずかに異なる方法で表現することができます。たとえば、フィールドの順序はクライアントに関係なく、共通のですが、クライアントがフィールドを昇順で書き込むためには、クライアントが明示的に処理する必要がありますフィールドは任意の順序で表示されます。私がここで言っているのは、と全く同じバイトで、同じ順番であるではないかもしれないが、どんなクライアントでもうまく動作するはずだということだ。

フィーチャー(* Cough *は継承サポートのように)を提供する場合があり、主にその単一のクライアント内でのみ使用することを意図しています。その場合、私は:これらの機能が使用されていることが明らかであることを期待してください。そして、B:は常にが有効なprotobufストリームを生成します。(これらのフィールドを無視するか、bytes往復)。

+0

"同じ順序で全く同じバイト"でない場合、多くのクライアントが中断します。ハッシュと暗号の署名に依存している人。 – jaybny

関連する問題