对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化java
ObjectOutputStream将对象写到序列中,实现序列化ide
在文件中,以流 的形式,将对象读取出来,过程称为读取对象,对象的反序列化测试
ObjectInputStream将文件对象读取出来,实现反序列化this
示例:spa
package com.zs.Demo; import java.io.Serializable; public class Person implements Serializable { private String name;
//age不会被序列化 private transient int age; public Person(String name, int age) { this.name = name; this.age = age; } public Person() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
测试类:code
package com.zs.Demo; import java.io.*; public class Demo { public static void main(String[] args) { try { fun(); fun2(); } catch (Exception e) { e.printStackTrace(); } } //反序列化流 private static void fun2() throws Exception { //建立文件输入流对象 FileInputStream f=new FileInputStream("h:\\a.txt"); //建立反序列化流对象 ObjectInputStream os=new ObjectInputStream(f); //读文件中的对象 Object obj = os.readObject(); System.out.println(obj); //关闭流 os.close(); } //对象的序列化,将对象存到文件中 private static void fun() throws IOException { //建立文件输出流对象 FileOutputStream f=new FileOutputStream("h:\\a.txt"); //建立序列化流对象 ObjectOutputStream os=new ObjectOutputStream(f); //建立对象 Person p=new Person("张三",18); //将对象写到文件中 os.writeObject(p); //关闭序列化流 os.close(); } }
注意事项:对象
1.对象若要序列化,对象类必须实现Serializable接口(类经过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将没法使其任何状态序列化或反序列化。)blog
这个接口没有方法,称为标记性接口,起到标记做用,只有别标记的类才能够序列化;接口
2.静态不能够序列化:给age加上static修饰符,而后序列化,发现输出age=0get
缘由:对象序列化,而静态不属于对象,属于类,对象不包含静态,因此静态不能序列化,为零缘由是静态变量默认为0;
2.transient关键字,阻止成员变量序列化,若是不想让变量序列化,又不能使用静态修饰符,就用transient关键字