java - 未序列化的 Arraylist 始终为空

标签 java serialization arraylist

<分区>

我有很多 Java 类,但这是我第一次尝试序列化任何东西。我制作了自己的类(class),其中包括一个数组列表。主要对象是这些类的数组列表。我相信我做的一切都是正确的,但是当我读回它时,arraylist 总是空的。

主要(主要是测试)类:

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

public class IOTest {
public static void main(String[] args) {
    ArrayList<Info> master = new ArrayList <Info>();
    Info a = new Info("a");
    Info b = new Info("a");
    Info c = new Info("a");
    master.add(a);
    master.add(b);
    master.add(c);
    print(master);
    save(master);
    ArrayList<Info> loaded = new ArrayList <Info>();
    load(loaded);
    System.out.println("Loaded List:");
    System.out.println("Loaded Size:" + loaded.size());
    print(loaded);
}

public static void save(ArrayList a){
    File f = new File("savefile.dat");
    try {
        FileOutputStream fos = new FileOutputStream(f);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(a);
        fos.flush();
        fos.close();
     } catch (IOException ioe) {
         System.out.println("Failed to save");
     };
}

public static void load(ArrayList a){
    File f = new File("savefile.dat");
    try {
        FileInputStream fis = new FileInputStream(f);
        ObjectInputStream ois = new ObjectInputStream(fis);
        try {
          a = (ArrayList<Info>) ois.readObject();
        } catch (ClassNotFoundException cnfe) { 
            System.out.println("Failed to load");
        }
        fis.close();
     } catch (IOException ioe) {
         System.out.println("Failed to load");
     }
}

public static void print(ArrayList a){
    System.out.println(a);
}
}

自定义数据结构:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;


public class Info implements Serializable {
private static final long serialVersionUID = -5781559849007353596L;

ArrayList<String> list;
public Info( String e) {
    list = new ArrayList<String>();
    list.add(e);
}
@Override
public String toString() {
    return list.toString();
}

private void readObject(ObjectInputStream aInputStream) throws ClassNotFoundException, IOException {
    aInputStream.defaultReadObject();
}

private void writeObject(ObjectOutputStream aOutputStream) throws IOException {
    aOutputStream.defaultWriteObject();
}
}

如果有人能指出我做错了什么,我将不胜感激。

最佳答案

此问题与序列化无关。

您正在 load() 方法中更改 传递参数的引用 列表,这将不起作用,因为更改的引用将仅在该方法之前有效。将负载更改为以下

public static ArrayList<Info> load() {//Change return type
    File f = new File("savefile.dat");
    try {
        FileInputStream fis = new FileInputStream(f);
        ObjectInputStream ois = new ObjectInputStream(fis);
        try {
            ArrayList<Info> a = (ArrayList<Info>) ois.readObject();//get the object that is read
            return a;
        } catch (ClassNotFoundException cnfe) {
            System.out.println("Failed to load");
        }
        fis.close();
    } catch (IOException ioe) {
        System.out.println("Failed to load");
    }
    return null;
  }

并使用返回的对象。

 ArrayList<Info> loaded = load();

关于java - 未序列化的 Arraylist 始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12795321/

相关文章:

动态表单创建/调查 Web 应用程序的数据库架构注意事项

C# 反序列化列表计数为零

java - 将字符串添加到列表中,其中某个字母的数量增加

java - 503 服务不可用错误 Apache Tomcat

java - 如何在 Spring 数据 r2dbc 中替换 @PrePersist

java - Oracle Web 服务日期在 Java 代码中返回 Null,但在 SOAP UI 中不返回 Null

java - 在 Java 中将日期格式 dd-MM-yyyy 更改为 yyyy-MM-dd

iphone - 在 iPhone 应用程序中保存数据并下次读取数据的最快方法是什么?

java - java是如何在Java中实现LinkedList到ArrayList的转换的?

c# - 'System.Collections.Generic.List<string>' 到 System.Collections.Generic.List<string>[*,*]