我有一个Java应用程序,想重新使用现有对象来反序列化传入的Google protobuf有线消息(字节[])。
我正在尝试解码现有的有线消息,并检查生成的Class文件中的方法,以查看是否有任何方法可以在已经创建的ProtoBuf Class对象上反序列化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;
}
是否有任何选项可以重新使用对象来解码传入的有线消息(字节[])?
这些是我在Java中对10万条消息进行序列化和反序列化并运行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