gpt4 book ai didi

java - ArrayList 上的可序列化丢失一些数据

转载 作者:行者123 更新时间:2023-11-29 07:24:54 25 4
gpt4 key购买 nike

我有一个 Employee 对象的 ArrayList,其中 Employee 类实现了 Serializable。我正在使用此代码将列表写入文件:

ArrayList<Employee> empList = new ArrayList<>();
FileOutputStream fos = new FileOutputStream("EmpObject.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// write object to file
empList .add(emp1);
empList .add(emp2);
oos.writeObject(empList);

empList .add(emp3);

oos.writeObject(empList);
}

如果我尝试反序列化它,我只会得到前两个对象,而不是第三个对象。谁能试试这是为什么?

edit1:如果我一次添加所有元素,一切都很好,但不是我第一次做的方式。有什么区别?

ArrayList<Employee> empList = new ArrayList<>();
FileOutputStream fos = new FileOutputStream("EmpObject.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// write object to file
empList .add(emp1);
empList .add(emp2);
empList .add(emp3);
oos.writeObject(empList);
}

在此之后我有 3 个元素

最佳答案

正如 GhostCat 和 uaraven 已经提到的那样,重置并不是您期望的那样,您应该查看有关序列化的教程,并可能考虑使用某物。否则,如果这不适合您的用例。

如果创建一个新的 FileOutputStream,您的代码可能如下所示:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class SerializationTest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
String path = "EmpObject.ser";

ArrayList<Employee> empList = new ArrayList<>();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));

empList.add(emp1);
empList.add(emp2);
oos.writeObject(empList);

empList.add(emp3);
// Create a new FileOutputStream to override the files content instead of appending the new employee list
oos = new ObjectOutputStream( new FileOutputStream(path));
oos.writeObject(empList);

ObjectInputStream objectinputstream = new ObjectInputStream(new FileInputStream(path));
List<Employee> readCase = (List<Employee>) objectinputstream.readObject();

System.out.println(readCase);
}
}

关于java - ArrayList 上的可序列化丢失一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55108579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com