如何将获得的数据(反)序列化和传输到 ArrayList?

How to (de)serialize and transfer data obtained to an ArrayList?

我正在尝试(反)序列化一个名为“people.dat”的简单序列化文件,其中包含人物数据(“姓名”、“年龄”、“ mail",...) 并将所有行(person1 数据,person2 数据,..)传输到 ArrayList。

像这样:


import java.io.*;
import java.util.*;

class People implements Serializable{
    protected String _name;
    protected int _age;
    protected String _mail;
    protected String _comments;
    
    public People(String name, int age, String mail, String comments) {
        _name = name;
        _age = age;
        _mail = mail;
        _comments = comments;
    }}


public class Example {
    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
        // TODO Auto-generated method stub
        if (new File("people.dat").exists()) {      
            try {
                ObjectInputStream ois = new ObjectInputStream (new FileInputStream("people.dat"));
                ArrayList<People> p = new ArrayList<People>();
                p = (ArrayList<People>) ois.readObject();
                System.out.println("Array size is: " + p.size());
            }catch (Exception e){
              e.printStackTrace();
            }
        }}}


它向我发送行中的“ClassNotFoundException”

p = (ArrayList<People>) ois.readObject();

我的问题是:

1- 我做错了什么?

2- 将这些数据从 .dat 文件传递​​到 ArrayList 的最佳方式(对于初学者)是什么?

谢谢..

一个可能的原因是 class Person 的 class 路径在您序列化时与您尝试反序列化时不同。

会引发错误的示例:

  • Person 的 class 路径在序列化时是 app.package.Person
  • Person 的 class 路径在尝试反序列化时现在是 app.Person

这是行不通的,因为在您的序列化文件中,写入了“原始”class 路径。

另外,你到底连载了什么?一个包含 Persons 的 ArrayList?或者只是一个 Person 而你正试图在 ArrayList 中直接反序列化它(这是不可能的)?

如果你想反序列化成一个ArrayList,这个东西必须是一个被序列化的ArrayList! (因为是的,你可以序列化一个 ArrayList,因为它只是一个 class!)