序列化和反序列化
一、定义:什么是序列化?什么是反序列化?
序列化:把java对象转化为字节序列的过程
反序列化:把字节序列恢复为java对象的过程
二、作用
(1)把对象的字节序列永远保存在磁盘上。(持久化对象)
(2)可以将java对象以字节序列的方式在网络传输。(网络传输对象)
三、如何实现
对象必须实现Serializable或Externalizable接口中的一个
如果对序列化的需求非常简单,没有对序列化过程控制的需求,可以简单实现Serializable接口即可
代码:创建一个类,实现Serializable接口
import java.io.Serializable;
public class Person implements Serializable{
// 阻止成员变量序列化 transient 例:private transient int age; age变不能被序列化
private String name;
private int age;
//构造有参函数
public Person(String name,int age){
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;
}
@Override
public String toString() {
return "Demo1Person [name=" + name + ", age=" + age + "]";
}
}
//对对象进行序列化
public class Demo1ObjectStream{
public static void main(String[] args) throws Exception{
//创建字节输出流对象,并绑定目的地
FileOutputStream fos=new FileOutputStream("d:\\Object.txt");
//创建写出对象的序列化流的对象 构造方法传递字节输出流
ObjectOutputStream oos=new ObjectOutputStream(fos);
Person p=new Person("徐凤年",25);
//writeObject() 写
oos.writeObject(p);
oos.close()
}
}
//反序列化 将文件中的序列化字符转化为对象
public class Demo2ObjectStream{
public static void main(String[] args) throws Exception{
FileInputStream fis=new FileInputStream("d:\\Object.txt");
//创建反序列化流 readObject() 读对象
ObjectInputStream ois=new ObjectInputStream(fis);
Object ob=ois.readObject();
System.out.println(ob);
ois.close();
}
}