首頁 > Java > 主體

Java中常見欄位的Protobuf部分序列化

WBOY
發布: 2024-02-12 15:45:06
轉載
1191 人瀏覽過

問題內容

我有一條 protobuf 訊息,需要傳送給多個客戶端。該訊息對於每個客戶端具有相同的數據,除了一個欄位(序號)對於每個客戶端來說是不同的。現在,我可以更改生成的 Java 訊息物件中的字段,並分別為每個客戶端序列化訊息。但是有沒有一種方法可以序列化除一個欄位之外的所有內容,然後僅為每個客戶端序列化該欄位(例如,交換序列化訊息中的對應位元組或其他內容)?

編輯:我見過 mergeFrom 方法來合併兩個訊息,但根據我的理解,它首先解析訊息,然後交換數據,然後您可以再次序列化它,所以根本不是性能優化(?)。

解決方法

首先,我想非常確定這實際上與效能相關。如果協定緩衝區訊息不大(如果它們不是多個千字節,我什至不會考慮這一點),那麼我預計這對效能的影響基本上為零,並且您甚至不應該嘗試優化它.

假設您已將其視為瓶頸,那麼這並不難。連接序列化原型構造合併形式,所以大概這就是

myMessage.toBuilder().clearSpecialField().build().writeTo(outputStream);
MyMessage.newBuilder().setSpecialField(...).build().writeTo(outputStream);
登入後複製

(如果您已將 special_field 作為必填欄位(違反最佳實踐),那麼您可能需要改用 buildPartial。)

然後你將其作為一條原始訊息讀取

MyMessage.parseFrom(inputStream);
登入後複製

以上是Java中常見欄位的Protobuf部分序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板