Java对象的序列化和反序列化
一:序列化和反序列化的概念。
两个用于从流中读取对象
序列化:将对象转换字节序列的过程称为对象的序列化。
反序列化:将字节序列恢复为原对象的过程称为对象的反序列化。(把对象的字节序列永久的保存到硬盘上,通常放一个文件)。
二:JDK库中的序列化API
反序列化流:ObjectInputStrean,它的readObject()方法从持久化存储中把对象读取出来。
序列化流:ObjectOutputStream,它的writeObject()方法将字节序列永久的写入硬盘上。
对象序列化过程:
1、创建一个对象输出流ObjectOutputStream。
2、通过输出流的writeObject()方法写对象。
反序列化过程:
1、创建一个对象输入流ObjectInputStream。
2、通过输入流的readObject()方法读对象
例子:
定义一个person类,实现 Serializable接口
1 package com.aaa.demo4; 2 3 import java.io.Serializable; 4 5 public class Demo1Person implements Serializable{ 6 public String name; 7 public int age; 8 public Demo1Person() { 9 } 10 public Demo1Person(String name, int age) { 11 super(); 12 this.name = name; 13 this.age = age; 14 } 15 public String getName() { 16 return name; 17 } 18 public void setName(String name) { 19 this.name = name; 20 } 21 public int getAge() { 22 return age; 23 } 24 public void setAge(int age) { 25 this.age = age; 26 } 27 @Override 28 public String toString() { 29 return "Demo1Person [name=" + name + ", age=" + age + "]"; 30 } 31 32 }
序列化和反序列化Person对象:
1 package com.aaa.demo4; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 9 public class Demo1ObjectStream { 10 public static void main(String[] args) throws Exception { 11 writeObject();//序列化对象 12 readObject();//反序列化对象 13 } 14 public static void readObject() throws Exception{ 15 FileInputStream fis=new FileInputStream("c:\person.txt"); 16 //创建反序列化流 readObject() 读对象 17 ObjectInputStream ois=new ObjectInputStream(fis); 18 Object obj=ois.readObject(); 19 System.out.println(obj); 20 ois.close(); 21 } 22 public static void writeObject() throws Exception{ 23 FileOutputStream fos=new FileOutputStream("c:\person.txt"); 24 //创建写出对象的序列化的对象 构造方法传递字节输出流 25 ObjectOutputStream oos=new ObjectOutputStream(fos); 26 Demo1Person p=new Demo1Person("大冰",23); 27 oos.writeObject(p); 28 oos.close(); 29 } 30 }