2017-11-27 3 views
1

私はproto3でフィールドが設定されているかどうかを知る能力を削除しました。解決策として、いくつかのサイトを読みました。プリミティブをラッパー・メッセージに埋め込むことができます。内部protobufメッセージをインポートするには?

hereが表示されているように、protobufには私が必要とするものを正確に行うためにwrappers.protoの下にいくつかの内部パッケージがあります。

wrappers.protoファイルをコピーして自分のシステムに貼り付け、別のファイルA.protoからインポートして使用できます。

しかし、私は疑問に思う:

  1. 彼らの内部のラッパーを使用することが良い選択でしょうか?

  2. もしそうなら、ファイルのコピーを自分で作成するのではなく、jarファイルから直接インポートできますか?

(私は自分のjarファイルディレクトリを使用してインポートしようとしましたが、うまくいきませんでした)

import "lib/protobuf-java-3.5.0.jar/com/protobuf/wrappers.proto"; --> fails 

中:

import "resources/protoBeans/wrappers.proto"; --> my own copy --> works 

答えて

1

することができます、そしてそれはおそらくそれらを作成することが好ましいですサブメッセージはバイナリサイズと処理にいくらかのオーバーヘッドを加え、同じことを達成するためにoptionalフィールドを使用したproto2メッセージとワイヤ互換ではないことに注意してください。 "wrappers.proto"は、すでにprotocのバイナリの場所の下にあるはずです。典型的な使い方は次のようになります。

syntax = "proto3"; 
import "google/protobuf/wrappers.proto"; 

message Foo { 
    .google.protobuf.Int32Value foo = 1; 
} 

「wrappers.proto」を使用してではなく、それを自分で再実装のさらなる利点は、それがオーダーメイドのJSONハンドリングと優れた "と「よく知られているタイプ」としてカウントされるということです任意の "サポート。

関連する問題