概念:
序列化就是将对象的状态存储到特定的介质中的过程,也就是将对象状态转换为可保持或传输格式的过程。
反序列化则是从特定存储介质中将数据重新构建对象的过程。可以将存储在文件上的对象信息读取,然后重新构建为对象。
过程:
将对象的公有成员、私有成员包括类名,转换为字节流---》写入数据流---》存储到存储介质中(文件)。
意义:
将java对象序列化后,可以将其转换为自己序列,这样就可以保存在磁盘上,也可以借助网络进行传输。
对象的保存是二进制状态,实现了平台的无关性。
import java.io.Serializable; /* * Serializable:用于给被序列化的类加入ID号。 * 用于判断类和对象是否是同一个版本。 */ //Person诶实现Serializable接口,代表这个类可被序列化 public class Person implements Serializable/*标记接口*/ { /** * transient:非静态数据不想被序列化可以使用这个关键字修饰。 */ private static final long serialVersionUID = 9527l; private transient String name; private static int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } 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; } }
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import cn.itcast.io.p2.bean.Person; public class ObjectStreamDemo { /** * @param args * @throws IOException * @throws ClassNotFoundException */ public static void main(String[] args) throws IOException, ClassNotFoundException { // writeObj(); readObj(); } public static void readObj() throws IOException, ClassNotFoundException { //ObjectInputStream 对象输入流 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object")); //对象的反序列化。需要类型转换。 Person p = (Person)ois.readObject(); System.out.println(p.getName()+":"+p.getAge()); ois.close(); } public static void writeObj() throws IOException, IOException { //ObjectInputStream 对象输出流 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.object")); //对象序列化。 被序列化的对象必须实现Serializable接口。 oos.writeObject(new Person("小强",30)); oos.close(); } }