我已经将一个arraylist序列化到一个文件中,但很难将它们反序列化为一个arraylist并打印出来。如何编辑我的代码?谢谢!
这是序列化方法:
public static void writeMembersToDisk(ArrayList<Member> membersList) {
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("members.s")));
for(Member cmd : membersList) {
out.writeObject(cmd);
}
} catch (Exception e) {
System.err.println("Error: " + e.toString());
} finally {
try {
out.close();
} catch (IOException e) {
System.err.println("Error: " + e.toString());
}
}
}
我不知道如何将文件反序列化回arraylist,这是我的代码:
public static ArrayList<Member> readMembersFromDisk() {
ArrayList<Member> cmd = null;
try {
FileInputStream is = new FileInputStream("members.s");
ObjectInputStream os = new ObjectInputStream(is);
cmd = (ArrayList) os.readObject();
os.close();
} catch (Exception e) {
System.err.println("Error: " + e.toString());
}
return cmd;
}
当我尝试打印arraylist时,我收到一个错误:“java.lang.ClassCastException:Member无法强制转换为java.util.ArrayList”
public static void main(String[] args) {
ArrayList<Member> list = MembersListFileManager.readMembersFromDisk();
System.out.println(list);
}
答案 0 :(得分:2)
您正在从原始列表中一次编写一个Member
对象。
for(Member cmd : membersList) {
out.writeObject(cmd);
}
但在阅读时,您正试图将Member
对象转换为ArrayList
这是错误的。
您需要通过执行以下操作将读取对象强制转换为Member
:
Member member = (Member) os.readObject();
但这只是获取序列化的第一个对象。要获取所有对象,请遍历并继续将每个成员对象添加到arraylist中。
// Pseudo-code
loop till objects are there{
Member member = (Member) os.readObject(); // read the object
cmd.add(member); // add it to the list
}
循环使用它的方法之一是,
while (true) {
try {
Member member = (Member) os.readObject();
// Do something with the object
} catch (EOFException e) {
break; // Break when the end-of-file is reached
}
}
os.close();