Serialization 使用Kryo进行集合序列化

Serialization 使用Kryo进行集合序列化,serialization,kryo,Serialization,Kryo,我试图使用来序列化和反序列化java集合 序列化方法如下所示: public <T> byte[] serialize(List<T> objectsToSerialize) { CollectionSerializer cs = new CollectionSerializer(); Output output = new Output(); cs.write(kryo, output, objectsToSerialize); return output.toByte

我试图使用来序列化和反序列化java集合

序列化方法如下所示:

public <T> byte[] serialize(List<T> objectsToSerialize) {
CollectionSerializer cs = new CollectionSerializer();
Output output = new Output();
cs.write(kryo, output, objectsToSerialize);
return output.toBytes();
}
public byte[]序列化(List objectsToSerialize){
CollectionSerializer cs=新CollectionSerializer();
输出=新输出();
写(kryo、输出、objectsToSerialize);
返回输出。toBytes();
}
现在我想编写反序列化方法,但在这样做时遇到了困难。基本上CollectionSerializer有一个读取方法,但我不知道如何使用它(据我所知,文档非常糟糕)


有什么想法吗?

如果您只想将
集合
序列化为文件,那么标准的Kryo命令(例如
Kryo.writeClassAndObject
)可以非常充分地处理这个问题。例如,下面的程序将字符串集合传递给文件“testfile”,然后再传递回来

public class TestClass{


    public static void main(String[] args) throws FileNotFoundException{
        serialize();
        deSerialize();
    }

    public static void serialize() throws FileNotFoundException{
        Collection<String>collection=new ArrayList<>();

        collection.add("This is a serialized collection of strings");

        Kryo kryo = new Kryo();
        Output output = new Output(new FileOutputStream("testfile"));
        kryo.writeClassAndObject(output, collection);
        output.close();
    }

    public static void deSerialize() throws FileNotFoundException{
        Collection<String>collection;

        Kryo kryo = new Kryo();
        Input input = new Input(new FileInputStream("testfile"));
        collection=(Collection<String>)kryo.readClassAndObject(input);
        input.close();

        for(String string: collection){
            System.out.println(string);
        }

    }


}
公共类TestClass{
公共静态void main(字符串[]args)引发FileNotFoundException{
序列化();
反序列化();
}
public static void serialize()引发FileNotFoundException{
Collectioncollection=新的ArrayList();
add(“这是字符串的序列化集合”);
Kryo Kryo=新Kryo();
输出=新输出(新文件输出流(“测试文件”));
writeClassAndObject(输出、集合);
output.close();
}
public static void反序列化()引发FileNotFoundException{
收藏收藏;
Kryo Kryo=新Kryo();
输入=新输入(新文件输入流(“测试文件”));
collection=(collection)kryo.readClassAndObject(input);
input.close();
for(字符串:集合){
System.out.println(字符串);
}
}
}

deSerialize()如何知道类的结构(如果不是字符串的集合)#Omri WriteClassAndObject(与WriteObject不同)在对象前面添加少量元数据,以便kryo知道将其反序列化到什么。当然,在铸造时,您可以将其铸造为最通用的类型;所以,如果它可能是您要强制转换到(collection)的任何集合,则get com.esotericsoftware.kryo.KryoException:在尝试反序列化列表集合时遇到未注册的类ID:1811647497