複数のクライアントに送信する必要がある protobuf メッセージがあります。メッセージには、クライアントごとに異なる 1 つのフィールド (シーケンス番号) を除いて、各クライアントで同じデータが含まれます。これで、生成された Java メッセージ オブジェクトのフィールドを変更し、クライアントごとにメッセージを個別にシリアル化できるようになりました。しかし、1つのフィールドを除くすべてをシリアル化して、各クライアントに対してそのフィールドだけをシリアル化する方法はありますか(たとえば、シリアル化されたメッセージ内の対応するバイトを交換するなど)?
編集: 2 つのメッセージをマージする mergeFrom メソッドを見てきましたが、私の理解では、最初にメッセージを解析し、次にデータを交換してから、再度シリアル化できるため、パフォーマンスの最適化はまったくありません (? )。
まず、これが実際にパフォーマンスに関連していることを確認したいと思います。
これがボトルネックであると特定したと仮定すると、これは難しいことではありません。連結されたシリアル化プロトタイプはマージされたフォームを構築するため、これはおそらく
です。 リーリー (special_field
を (ベスト プラクティスに反して) 必須フィールドにしている場合は、代わりに buildPartial
を使用することをお勧めします。)
その後、それを生のメッセージとして読みます
リーリー以上がJava の共通フィールドの Protobuf 部分シリアル化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。