Java 对象输入流 readObject();
Java Object input stream readObject();
我已将一个对象保存到数组列表并将文件另存为 .dat,但是当我想读取该对象时它只显示 null 而不是值。
Class
public class Person implements Serializable {
public static String Name;
public static String Contact;
public Person(String Name, String Contact) {
this.Name = Name;
this.Contact = Contact;
}
public String getName() {
return Name;
}
public String getContact() {
return Contact;
}
}
代码
FileInputStream fis;
try {
fis = new FileInputStream("Person.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<Person> per = (ArrayList<Person>) ois.readObject();
ois.close();
per.get(0);
Person pe = per.get(0);
System.out.println(pe.getName());
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
您定义了未序列化的静态成员 Name
和 Contact
。删除 static
修饰符以使其工作。
只有 non-transient
和 non-static
字段将被序列化。
参考 oracle 文档 page and jusfortechies 文章。
改变
public static String Name;
public static String Contact;
到
public String Name;
public String Contact;
我已将一个对象保存到数组列表并将文件另存为 .dat,但是当我想读取该对象时它只显示 null 而不是值。
Class
public class Person implements Serializable {
public static String Name;
public static String Contact;
public Person(String Name, String Contact) {
this.Name = Name;
this.Contact = Contact;
}
public String getName() {
return Name;
}
public String getContact() {
return Contact;
}
}
代码
FileInputStream fis;
try {
fis = new FileInputStream("Person.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<Person> per = (ArrayList<Person>) ois.readObject();
ois.close();
per.get(0);
Person pe = per.get(0);
System.out.println(pe.getName());
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
您定义了未序列化的静态成员 Name
和 Contact
。删除 static
修饰符以使其工作。
只有 non-transient
和 non-static
字段将被序列化。
参考 oracle 文档 page and jusfortechies 文章。
改变
public static String Name;
public static String Contact;
到
public String Name;
public String Contact;