問題內容
我有一條 protobuf 訊息,需要傳送給多個客戶端。該訊息對於每個客戶端具有相同的數據,除了一個欄位(序號)對於每個客戶端來說是不同的。現在,我可以更改生成的 Java 訊息物件中的字段,並分別為每個客戶端序列化訊息。但是有沒有一種方法可以序列化除一個欄位之外的所有內容,然後僅為每個客戶端序列化該欄位(例如,交換序列化訊息中的對應位元組或其他內容)?
編輯:我見過 mergeFrom 方法來合併兩個訊息,但根據我的理解,它首先解析訊息,然後交換數據,然後您可以再次序列化它,所以根本不是性能優化(?)。
解決方法
首先,我想非常確定這實際上與效能相關。如果協定緩衝區訊息不大(如果它們不是多個千字節,我什至不會考慮這一點),那麼我預計這對效能的影響基本上為零,並且您甚至不應該嘗試優化它.
假設您已將其視為瓶頸,那麼這並不難。連接序列化原型構造合併形式,所以大概這就是
myMessage.toBuilder().clearSpecialField().build().writeTo(outputStream); MyMessage.newBuilder().setSpecialField(...).build().writeTo(outputStream);
(如果您已將 special_field
作為必填欄位(違反最佳實踐),那麼您可能需要改用 buildPartial
。)
然後你將其作為一條原始訊息讀取
MyMessage.parseFrom(inputStream);
以上是Java中常見欄位的Protobuf部分序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版