2017-02-02 5 views

答えて

1

Protobufワイヤフォーマットは、後方互換性と前方互換性があるように設計されています。したがってgenerally it is safe、特定のv2フィーチャーを使用して自分自身を撮影しない限り、custom default values。デフォルト値はconstant in v3です。特にenumのデフォルト値は最初のエントリで、it must be zeroです。したがって、v2のカスタム値は失われます。デフォルト値のフィールドはワイヤにまったく表示されないため、レシーバーは設定されていないか、デフォルト値に設定されているかどうかはわかりません。 v3ではすべてのフィールドがoptional(これ以上はrequired)ではないので、どのフィールドも法的に不足する可能性があることに注意してください。

v2でカスタムデフォルトを使用していない場合、または最初の列挙型エントリで0以外の値を使用した場合、v3はそれを正しく読み込む必要があります。

+0

v2でデフォルト値を使用しても、v3でメッセージを読み取ることができます。デフォルトはすべてゼロになっているということだけです。フィールドが送信者によって設定されていない場合、その値は受信側でゼロになります。そして、これを送信者が明示的にゼロに設定したフィールドと区別する方法はありません。なぜなら(私が理解するように)「持っている」アクセサが削除されているからです。 –

+0

どちらの場合でもproto2構文を使用していたらどうなりますか? jarファイルをアップグレードするだけですが、古い構文を使用していますか? – litov

関連する問題