[Java:尝试从非常大的文件中读取对象时出现OutOfMemory异常

问题描述 投票:0回答:1

我使用以下代码在文件中保存了将近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()的选项,所以它只能从很大的文件中检索几个对象。我该如何改善?请帮助。

java arrays arraylist out-of-memory fileinputstream
1个回答
0
投票

您将一口气序列化和反序列化整个集合。如果编写单个对象(而不是包含的ArrayList),则可以一次读取一个范围。

© www.soinside.com 2019 - 2024. All rights reserved.