菜鸟的成长之路
含义
序列化:将指定的对象写到文件的过程
反序列化:将文件读出来的过程
前提
1.实现Serializable接口,否则会报错,如下图
错误信息public class User implements Serializable{
private int age;
private String name;
public User(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
2.将对象写入到文件中
/**
* 将Object序列化到文件中
* @throws IOException
*/
@Test
public void test() throws IOException {
File f = new File("2.txt");
if(! f.exists()){
System.out.println(f.createNewFile());
}
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new User(12,"ame"));
oos.flush();
oos.close();
}
3.将文件读出来
/**
* 将 文件 反序列化到Object中
* @throws IOException
* @throws ClassNotFoundException
*/
@Test
public void test1() throws IOException, ClassNotFoundException{
File f = new File("2.txt");
if(f.exists()){
FileInputStream fis = new FileInputStream(f);
ObjectInputStream ois = new ObjectInputStream(fis);
User user = (User)ois.readObject();
System.out.println(user);
}
}
注意点
1.必须实现Serializable接口,序列化类中包含的类也要实现这个接口
2.如果类在序列化后发生变化,反序列化会出现问题,可以指定一个serialVersionUID
注释:serialVersionUID 是用于记录class文件的版本信息的,serialVersionUID这个数字是JVM(JAVA虚拟界)通过一个类的类名、成员、包名、工程名算出的一个数字。而这时候序列化文件中记录的serialVersionUID与项目中的不一致,即找不到对应的类来反序列化。 这时可以指定一个serialVersionUID
3.当你不想要某些字段序列化时候,可以用transient关键字修饰
网友评论