对象序列化:
对象的序列化(Serialize)指将一个java对象写入IO流中;
对象的反序列化(Deserialize)指从IO流中恢复该Java对象;
序列化的含义和意义:
序列化机制允许将实现序列化的java对象转换成字节序列,将这些字节序列可以保存在磁盘,或者通过网络传输,以后重新恢复成原来的对象。
序列化使得对象可以脱离程序的运行 , 独立存在。
所有的分布式应用常常需要跨平台,跨网络,所以要求所有传递的参数,返回值必须实现序列化。
通常建议:程序创建的每个JavaBean类都实现Serializable
如果要让某个对象支持序列化机制,该类必须实现两个接口之一 : Serializable Externalizable
使用对象流实现序列化 : demo如下
package com.demo.serialize; import java.io.Serializable; public class Person implements Serializable{ private String name ; private int age; public Person(String name, int age) { System.out.println("序列化成功"); this.name = name; this.age = age; } /*//这是没有无参构造器的,加了无参的反序列化的时候报错 public Person() { super(); // TODO Auto-generated constructor stub }*/ 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 + "]"; } }
package com.demo.serialize; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class WriteObject { public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream("D://object.txt")); Person person = new Person("张三", 18); objOut.writeObject(person); objOut.close(); System.out.println("----------------------"); ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("D://object.txt")); Person p = (Person)objIn.readObject(); System.out.println(p.toString()); objIn.close(); } }
注意事项: 1.person类只有一个有参数的构造器,加无参构造器,反序列化报错,
2.序列化的时候person里面是有打印一句话的,但是反序列化的时候没有打印,说明反序列化机制无须通过构造器来初始化java对象。
3.反序列化的时候,要有对应的java类 , 不然会报calssNotFoundException异常
4.如果使用序列化机制往一个文件中写入多个java对象,反序列化恢复的时候必选按照实际写入的顺序读取