在java中读取和写入文件中的对象

时间:2017-03-17 09:44:44

标签: java object serialization

我尝试在序列化后在java中的文件中编写对象。目前,我正在使用writeObject()方法。使用readObject()读取对象总是返回第一个对象。我不确定这是否是原因,但我每次写文件时都没有创建新对象,我只是重置现有对象的值并调用writeObject(obj)。

Student s1 = new Student(1,2);
// Assume I need to create an output file test.txt which has objects written to it.
ObjectOutputStream out = new ObjectOutputStream(new FileWriter("test.txt"));
int i=0; 
while ( i < MAX ) {
   s1.x = i;
   s1.y = i*10;  // assume that the student class has two fields x and y
   out.writeObject(s1);
   i++;
}

现在当我调用readObject()时,它总是返回插入的第一个对象的值。可能是因为Object流通过保存对表中对象的引用来工作,而我不是每次都创建新对象,这是原因吗?

然后我google了很多,并阅读了ObjectStream的行为。所以,我使用writeUnshared()方法进行编写,并能够读取每个对象。但是这种情况下的内存消耗是以GB为单位写入大量对象(10 ^ 9或更多)(也需要超过5分钟左右)。

我读到的其他答案说在将对象写入文件后使用reset()。这会重置我的流,但现在输出文件的大小变得非常大。正如我所观察到的,当对象数量非常大(比如大约2 GB的输入对象)时,会创建5 GB的文件。

在这种情况下可以做些什么?由于性能问题,我认为我无法使用writeUnshared()reset()。如果我仅使用writeObject()进行写入,他们如何才能执行对象的读取。任何替代方案也受到欢迎。 或者做类似工作的任何其他方法都可以完成这项工作。在我读到的时候,我听说过其他的序列化程序,如XML,JSON,Java的一些Kryo以及许多其他的。但我担心那些性能(内存和输出大小)。

0 个答案:

没有答案