【问题标题】:How do I serialize and deserialize arrayList object?如何序列化和反序列化 arrayList 对象?
【发布时间】:2015-06-28 20:40:17
【问题描述】:

在我的程序中,输入对象存储在 arrayList 中。问题是我在关闭应用程序后丢失了所有数据。

这就是为什么我想更进一步将这些对象存储在磁盘上,以便在关闭应用程序后不会丢失任何数据。最终我想读取文件。我正在学习的课程是:ReaderWriter

[我开始知道,在读写文件之前,我必须对对象进行序列化和反序列化。我不知道该怎么做。我在网上搜索过,大部分都是在main方法里面做的。但在我的情况下,我有不同的 setObject 和 getObject 类,这就是我感到困惑的原因。]

人物信息:

public static void main(String[] args) {
    System.out.println("WELCOME TO MY PERSONAL DATABASE\n\n");
    Scanner input = new Scanner(System.in);
    List<PeopleObject> peopleObject = new ArrayList<PeopleObject>();
    String name;
    int age;
    int option;

    while (true) {

        System.out.println("1. Enter info\n"
                + "2. Print them out\n"
                + "3. Exit\n"
                + "*********"
                + "*********\n");
        option = input.nextInt();
        input.nextLine();

        switch (option) {
            case 1:
                PeopleObject p_object = new PeopleObject();
                System.out.println("Enter your friends name:");
                p_object.setName(input.nextLine());
                System.out.println("Enter age: ");
                p_object.setAge(input.nextInt());

                peopleObject.add(p_object);
                System.out.println("\n");
                break;
            case 2:
                System.out.println("Name \tage");
                for (PeopleObject printPeopleObject : peopleObject) {
                    System.out.println(printPeopleObject);

                }
                System.out.println("\n\n");
                break;
            case 3:
                return;
        }

    }

}

人物对象:

private String name;
private int age;

public PeopleObject() {
    this.name = null;
    this.age = 0;

}

public void setName(String name) {
    this.name = name;
}

public void setAge(int age) {
    this.age = age;

}

@Override
public String toString() {
    return name + "\t\t" + age;
}

读写器:

public class ReaderWriter {
        //I want to use this class for serialization and deserialization object
        //writing those data into file and reading them
    }

【问题讨论】:

  • VGR,我看过这种类似的,但可能是我太笨了,无法具体弄清楚如何在我的程序中实现它。因为我看到我的主类中有arrayList,而对象在不同的​​类中。我不知道我必须在哪里对其进行序列化和反序列化。

标签: java serialization file-io arraylist deserialization


【解决方案1】:

使用ObjectOutputStreamObjectInputStream

PeopleObject 必须实现Serializable

ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("name"));
stream.writeObject(yourArrayList);

ObjectInputStream stream = new ObjectInputStream(new FileInputStream("name"));
yourArrayList = (List<PeopleObject>)stream.readObject();

【讨论】:

  • 您需要在阅读时进行少量演员:yourArrayList = (ArrayList)stream.readObject();
  • 是的。忘了那个。会解决的。
  • talex,刚刚变得情绪化并投了赞成票。但事实是我没有得到那么多,几乎没有。我的arrayList 在我的主类中,那么如何在 PeopleObject 类中实现它。我也不知道 List
  • 您能否重新表述您的问题。我一个字都听不懂。在做之前冷静下来:)
  • 什么是“yourArrayList”?并且“List 如何在主类之外使用?因为我在主类中创建了arrayList。