我遇到了以下问题:我想将一个非常大的对象(内存中几百MB)序列化为一个文件。
据我所知,Kryo是最好的序列化库之一,我一直在使用它来序列化我的对象:
OutputStream fOutStream = new FileOutputStream(ParamsProvider.STORAGE_HH_FILENAME);
Output out = new Output(fOutStream);
kryo.writeObject(out, data);
out.close();
fOutStream.close();
OutputStream fOutStream = new FileOutputStream(ParamsProvider.STORAGE_HH_FILENAME);
Output out = new Output(fOutStream);
kryo.writeObject(out, data);
out.close();
fOutStream.close();
这会生成一个OutOfMemory异常:我想在写入文件之前,整个对象首先在内存中序列化。
因此我的问题是:在每个块写入文件时是否有一个方法/库来序列化整个对象?
我想避免在序列化之前在较小元素中分解对象的解决方法:
更新 同时我实现了一个序列化方法,其中非常大的对象的不同元素被逐个序列化,这确实避免了OutOfMemory异常。
然而,我担心通过这种方法,我将失去对同一对象的多个引用的优势(就内存占用而言)(即那些引用将具有它们自己的对象实例)。对此有何想法?
新的代码片段(例如,其中field1包含对field2之外的相同对象的引用):
OutputStream fOutStream = new FileOutputStream(ParamsProvider.STORAGE_HH_FILENAME);
Output out = new Output(fOutStream);
kryo.writeObject(out, data.field1);
kryo.writeObject(out, data.field2);
(...)
kryo.writeObject(out, data.field50);
out.close();
fOutStream.close();
任何提示/帮助将不胜感激! 谢谢, 汤姆