什么是对象的序列化?
序列化:把对象转化成字节序列的过程就是对象的序列化;反序列化:把字节序列转化成对象的过程就是对象的反序列化。单看概念比较抽象,但是看代码就会明白。
对象序列化的用途
1、Java程序在运行中,对象都是分配在内存中,而序列化的一个用途就是将内存的中对象转化成磁盘中的对象。
2、对象不能直接在网络中传输,有时候需要将对象转成字节序列在网络中传输,这就是对象序列化的第二个用途。
如何实现对象的序列化?
1、新建一个实体对象,实现Serializable接口,这个实体对象就可以进行序列化了
package test.entity; import java.io.Serializable; /** * 实体类,用于序列化 * * @author YaoQi * @date 2017年6月24日 */ public class Person implements Serializable { /** * 序列化ID */ private static final long serialVersionUID = -3245478690496182643L; private String name; private int 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; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
2、在另一个类中序列化这个实体类,并且将序列化之后的字节序列存在磁盘上。
package test.serializable; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.Date; import test.entity.Person; /** * java实现对象的序列化 * * @author YaoQi * @date 2017年6月24日 */ public class SerializableDemo { public static void main(String[] args) throws Exception { //序列化一个对象 ObjectOutputStream objOutputStream = new ObjectOutputStream(new FileOutputStream("D:\obj.txt")); Person person = new Person(); person.setName("Tom"); person.setAge(24); //写入字面值常量 objOutputStream.writeObject("将对象序列化"); //写入匿名对象 objOutputStream.writeObject(new Date()); //写入对象 objOutputStream.writeObject(person); //反序列化一个对象 ObjectInputStream objInputStream = new ObjectInputStream(new FileInputStream("D:\obj.txt")); System.out.println("读取的字面值常量:"+(String)objInputStream.readObject()); System.out.println("读取的匿名对象"+(Date)objInputStream.readObject()); System.out.println("读取person对象"+((Person)objInputStream.readObject()).toString()); } }
执行之后控制台结果如下:
读取的字面值常量:将对象序列化
读取的匿名对象Sat Jun 24 22:42:22 CST 2017
读取person对象Person [name=Tom, age=24]