Ich versuche, eine quickfix.Message
Instanz mit Kryo-Serialisierung zu serialisieren.Serialisierung quickfix.Message mit Kryo
Ich benutze kryo Version 3.0.3.
Der Code-Snippet wird wie folgt:
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);
und ich halte diesen Fehler:
com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): quickfix.StringField Serialization trace: fields (quickfix.Message) at com.esotericsoftware.kryo.Kryo$DefaultInstantiatorStrategy.newInstantiatorOf(Kryo.java:1272) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.newInstantiator(Kryo.java:1078) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.newInstance(Kryo.java:1087) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.FieldSerializer.create(FieldSerializer.java:570) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:546) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:790) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:161) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:39) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:708) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:551) ~[kryo-3.0.3.jar:?] at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:686) ~[kryo-3.0.3.jar:?]
, wenn ich eine Kryo der JavaSerializer
wie folgt registrieren:
kryo.register(Message.class, new JavaSerializer());
ich dieser:
com.esotericsoftware.kryo.KryoException: Error during Java deserialization. at com.esotericsoftware.kryo.serializers.JavaSerializer.read(JavaSerializer.java:65) ~[kryo-3.0.3.jar:?]
ich anfangen zu denken, dass diese Aufgabe nicht einfach Kryo serialisiert werden mit ...
Irgendwelche Gedanken zu diesem Thema wird sehr geschätzt.
erstellen Die nächste Zeile im Fehler-Stack ist: Nachricht fixMessage2 = kryo.readObject (input, Message.class); – theDima
Es sucht nach einem Nicht-Argument-Konstruktor in StringField, einer Klasse, die in Message verwendet wird. Beide sind Klassen des Quickfix-Pakets, das ich von einem externen jar (nicht meinem Code) bekomme. Ich soll es nicht ändern (und nicht ändern). – theDima
Ja, aber Sie haben das Nicht-Argument-Konstruktorfehler mit diesem 'JavaSerializer' behoben und jetzt macht das Problem dasselbe im Deserialisierungsschritt. Gibt es eine Möglichkeit, einen 'JavaDeserializer' auf dem' readObject' zu verwenden? – rupweb