У меня есть приложение 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