java - 从文件中知道可序列化对象的数量

标签 java object serializable

我正在使用 Serializable 从文件中读取对象:

    public ArrayList<Object> deserialzePerson(String filename) {
    Object obj = null;
    ObjectInputStream ois;
    try {
        ois = new ObjectInputStream(new FileInputStream(filename));
        for (int i = 0; i < 100; i++) {
            obj = (Object) ois.readObject();
            ObjectArray.add(obj);
        }
    } catch (Exception e) {
    }
    return ObjectArray;
}

但是,我不知道文件中的对象数量,因此在 for 循环中使用了数字“100”。如果少于 100,异常将启动并且一切都按预期进行。尽管如此,我发现这个解决方案很差,因为它依赖于捕获错误。有没有办法为文件中的对象数量设置 for 循环的限制?

例如,当我使用 .hasNext(); 读取 .txt 文件时,是否有类似这样的对象?

最佳答案

public void serializePerson(String filename, List<Person> persons) {
    try (FileOutputStream fos = new FileOutputStream(filename);
         ObjectOutputStream ous = new ObjectOutputStream(fos)) {

        ous.writeInt(persons.size());
        for (Person person : persons) {
            ous.writeObject(person);
        }
    } catch (Exception e) {
    }
}

public List<Person> deserializePerson(String filename) {
    List<Person> result = new ArrayList<>();
    try (FileInputStream fis = new FileInputStream(filename);
         ObjectInputStream ois = new ObjectInputStream(fis)) {
        int size = ois.readInt();
        for (int i = 0; i < size; i++) {
            Person person = (Person) ois.readObject();
            result.add(person);
        }
    } catch (Exception e) {
    }
    return result;
}

关于java - 从文件中知道可序列化对象的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42053323/

相关文章:

java - 如何使用Java删除实时聊天消息

java - Android 加密/解密 sqlite 数据库 100% 安全

java - 未实现 Serialized 的类的序列化

java - 可序列化的条件是什么?

java - 使用随机访问文件删除记录

javascript - 在我的例子中如何设置数组

java - 从给定的 Java 对象生成特定 XML 的最佳实践

php - 如何检查数组是否是特定对象的集合?

android - 在构建版本中找不到数据类 Kotlin 的序列化程序

java - 如何以编程方式验证 log4j 2 是否已正确配置?