JavaでのTextFormatを使用して文字列にいるProtobufメッセージを変換しながら、フィールドの順序を制御するには?

トゥクトゥク:

私が使用して文字列に変換いるProtobufメッセージ持つTextFormat.printToString()以下のようなルックスを-

deploymentDef {
  id: "PX3C1ED"
  default: true
  type: ONPREM
  limits {
    clusterSize: 3
    limits {
      numVMs: 18000
      numVMsWithFlows: 18000
      activeFlows: 6000000
      totalFlows: 24000000
      flowPlanning: 4000000
      numDevices: 40
    }
  }
  isEnterprise: false
  brickSize: XLARGE
  clusterSize: 3
  description: "Default Role, Non-Enterprise, App-Discovery and Vf services stopped"
}

以下のようなプロト定義ルックス

message DeploymentDef {
    optional string id = 1;
    optional bool default = 2;
    optional DeploymentType type = 3;
    optional PlatformClusterLimits limits = 4;
    repeated Role roles = 5;
    optional bool isEnterprise = 6;
    optional Configs overrides = 7;
    optional BrickSize brickSize = 8;
    optional int32 clusterSize = 9;
    optional string description = 10;
}

それが表示することが可能であるdescription使用して文字列にプロトメッセージを変換しながら最初のフィールドとしてTextFormat.printToString()

ペトルJanecek:

タグの順序-あなたはおそらく今理解したように、メッセージは、フィールドの順にエンコードされています。これは、によって保証されてMessage#getAllFields()いる方法

ソートマップであることが保証され、それを反復することは、フィールド番号順でフィールドを返します。

あなたの説明フィールドが必要な場合はそのため、あなたはどちらか廃止と数字11-19に、すべてのフィールドに1-9を移動し、または廃止する必要があります最初のものであるためにdescriptionフィールドを、およびこれに類似した新しいメッセージを作成します。

message Deployment {
    optional string description = 1;
    required DeploymentDef deploymentDef = 2;
}

申し訳ありませんが、多くのより良い選択肢がない、いるProtobuf内のフィールドの順序は、(設計上)ではない非常に重要な/カスタマイズ可能です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=345103&siteId=1