我使用以下代码在文件中保存了将近1万个对象:
boolean exists = Tools.getDeviceInfo().exists();
FileOutputStream fos = new FileOutputStream(Tools.getDeviceInfo(), true);
ObjectOutputStream oos = exists ?
new ObjectOutputStream(fos) {
protected void writeStreamHeader() throws IOException {
reset();
}
}:new ObjectOutputStream(fos);
oos.writeObject(deviceInfos);
现在,当我尝试读取文件时,它抛出OutOfMemory异常。我该如何解决。下面是读取对象的代码。
FileInputStream fis = new FileInputStream(Tools.getDeviceInfo());
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<DeviceInfo> arrayList = new ArrayList<>();
try {
arrayList.addAll((ArrayList<DeviceInfo>)ois.readObject());
} catch (Exception e) {
e.printStackTrace();
}
ois.close();
return arrayList;
我想读取所有对象的原因是我想在tableview中显示所有数据,因此我需要将所有(10,000行)添加到arraylist中并在tableview上显示。是否有任何限制readObject()的选项,所以它只能从很大的文件中检索几个对象。我该如何改善?请帮助。
您将一口气序列化和反序列化整个集合。如果编写单个对象(而不是包含的ArrayList
),则可以一次读取一个范围。