然后问题使用kyro反序列化对象

问题描述:

我想将GenericData.Record序列化为一个文件,然后从该文件反序列化。 我可以序列化成功。但是当我反序列化文件时,就很麻烦了。

这是我的代码:

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.objenesis.strategy.StdInstantiatorStrategy;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class KryoTest {
    public static void main(String[] args) throws FileNotFoundException {
        writeObj();
        readObj();
    }

    public static void readObj() throws FileNotFoundException {
        Kryo kryo = new Kryo();
        kryo.register(GenericData.Record.class);
        kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
        Input input = new Input(new FileInputStream("file.bin"));
        GenericData.Record object2 = kryo.readObject(input,GenericData.Record.class);
        input.close();
    }

    public static void writeObj() throws FileNotFoundException {
        final Schema schema = new Schema.Parser().parse("{\"type\":\"record\",\"name\":\"User\",\"namespace\":\"myflink.serialize.bean\",\"fields\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"favorite_number\",\"type\":[\"int\",\"null\"]},{\"name\":\"favorite_color\",\"type\":[\"string\",\"null\"]}]}");
        Kryo kryo = new Kryo();
        kryo.register(GenericData.Record.class);
        GenericData.Record record = new GenericData.Record(schema);
        record.put("name","chensi");
        Output output = new Output(new FileOutputStream("file.bin"));
        kryo.writeObject(output,record);
        output.close();
    }
}

,但是我无法使用以下堆栈跟踪反序列化GenericData.Record:

Exception in thread "main" com.esotericsoftware.kryo.KryoException: java.lang.UnsupportedOperationException
Serialization trace:
reserved (org.apache.avro.Schema$Field)
fieldMap (org.apache.avro.Schema$RecordSchema)
schema (org.apache.avro.generic.GenericData$Record)
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:144)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:813)
        at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:161)
        at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:39)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:709)
        at myflink.serialize.KryoTest.readObj(KryoTest.java:29)
        at myflink.serialize.KryoTest.main(KryoTest.java:21)
Caused by: java.lang.UnsupportedOperationException
        at java.util.Collections$unmodifiableCollection.add(Collections.java:1055)
        at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:134)
        at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:40)
        at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:731)
        at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:125)
        ... 13 more
qq34589355 回答:然后问题使用kyro反序列化对象

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2570983.html

大家都在问