【发布时间】:2016-05-05 09:13:39
【问题描述】:
我正在尝试使用 kryo 序列化来序列化 quickfix.Message 实例。
我使用的是 kryo 3.0.3 版。
sn-p代码如下:
Message fixMessage = getFixMessage();
Kryo kryo = new Kryo();
kryo.register(Message.class);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Output output = new Output(outputStream);
kryo.writeObject(output, fixMessage);
output.flush();
byte[] result = outputStream.toByteArray();
output.close();
ByteArrayInputStream inputStream = new ByteArrayInputStream(result);
Input input = new Input(inputStream);
Message fixMessage2 = kryo.readObject(input, Message.class);
我不断收到此错误:
com.esotericsoftware.kryo.KryoException:无法创建类(缺少无参数构造函数):quickfix.StringField 序列化跟踪: 字段(quickfix.Message) 在 com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy.newInstantiatorOf(Kryo.java:1272) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1078) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1087) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:570) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:546) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:790) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:161) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:39) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:708) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:551) ~[kryo-3.0.3.jar:?] 在 com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:686) ~[kryo-3.0.3.jar:?]
如果我像这样注册 kryo 的 JavaSerializer:
kryo.register(Message.class, new JavaSerializer());
我得到了这个:
com.esotericsoftware.kryo.KryoException:Java 反序列化期间出错。 在 com.esotericsoftware.kryo.serializers.JavaSerializer.read(JavaSerializer.java:65) ~[kryo-3.0.3.jar:?]
我开始认为这个对象根本无法使用 kryo 序列化...
对此问题的任何想法将不胜感激。
【问题讨论】:
标签: java serialization quickfix kryo