反序列化文件,然后将内容存储在 ArrayList<String> 中。 (java)

deserialise file, then store content in ArrayList<String>. (java)

假设 serialise.bin 是一个充满单词的文件,并且在序列化时是一个 ArrayList

public static ArrayList<String> deserialise(){
    ArrayList<String> words= new ArrayList<String>();
    File serial = new File("serialise.bin");
    try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))){ 
        System.out.println(in.readObject());   //prints out the content
    //I want to store the content in to an ArrayList<String>
    }catch(Exception e){
        e.getMessage();
    }
return words;
}

我希望能够反序列化 "serialise.bin" 文件并将内容存储在 ArrayList

将它转换为 ArrayList<String>,就像 in.readObject() 做 return 和 Object 一样,并将它分配给 words:

@SuppressWarnings("unchecked")
public static ArrayList<String> deserialise() {

    // Do not create a new ArrayList, you get
    // it from "readObject()", otherwise you just
    // overwrite it.
    ArrayList<String> words = null;
    File serial = new File("serialise.bin");

    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))) { 
        // Cast from "Object" to "ArrayList<String>", mandatory
        words = (ArrayList<String>) in.readObject();
    } catch(Exception e) {
        e.printStackTrace();
    }

    return words;
}

可以添加注解 @SuppressWarnings("unchecked") 来抑制类型安全警告。发生这种情况是因为您必须将 Object 转换为 generic 类型。使用 Java 的 type erasure 编译器无法知道转换在运行时是否类型安全。 Here 是另一个 post。此外 e.getMessage(); 什么都不做,打印它或使用 e.printStackTrace(); 代替。