如何将获得的数据(反)序列化和传输到 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!)
我正在尝试(反)序列化一个名为“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!)