Десериализовать проводное сообщение Google Protobuf на существующий объект - PullRequest
1 голос
/ 28 марта 2019

У меня есть приложение Java, и я хочу повторно использовать существующий объект для десериализации входящего сообщения Google protobuf wire (byte []).

Я пытаюсь декодировать существующее проводное сообщение и проверять методы внутри сгенерированного файла класса, чтобы увидеть, есть ли какой-нибудь метод для десериализации байта [] в уже созданном объекте класса ProtoBuf. * ​​1003 *

Я десериализирую входящий проводной буфер (byte []), но каждый раз, когда я вызываю parseFrom для класса, он создает новый объект класса Protobuf. Я хотел повторно использовать объект класса. Я пытался вызвать метод parseFrom (byte []) для объекта, но в качестве статического метода поведение такое же.

Вот пример метода deserializeMessage ():

 public boolean deserializeMessage(byte[] wireMessage) throws InvalidProtocolBufferException
 { 
    // mktDataMsg = mktDataMsg.parseFrom(wireMessage); ==> Creates new object 
    mktDataMsg = MktDataMessage.parseFrom(wireMessage); 
    // Above code also creates new object of MktDataMessage. I want to 
    // decode wireMesage on existing object and overwrite field
    // values. That will avoid extra GC objects.
    return true;
 }

Есть ли возможность повторно использовать объект для декодирования входящего проводного сообщения (байт [])?

Это мои показатели производительности при сериализации и десериализации 100k-сообщений в Java, выполнении итерации 10 раз и получении среднего числа всех.

Msg Size|Total Data Processed (Mb)|Java Serialize Time|Java Deserialize Time
195     |19.5                     |                 19|                   45
1095    |109.5                    |                 84|                  132
2095    |209.5                    |                160|                  233
3095    |309.5                    |                230|                  294
4095    |409.5                    |                847|                 2465
5095    |509.5                    |               1037|                 3006
6095    |609.5                    |               1266|                 3766
...