Java序列化
一、简介
1、序列化:Java序列化是指把Java对象转换为字节序列的过程;
2、反序列化:而Java反序列化是指把字节序列恢复为Java对象的过程;
二、场景
1、进程间通信文本、图片、音频、视频等数据的传输,使用二进制序列化发送方将Java对象转化为字节序列,接收方将字节序列恢复成Java对象。
三、优点
1、数据的持久化,通过序列化可以把数据永久地把数据以文件的形式保存到硬盘上
2、利用序列化实现远程通信,在网络上传送对象的字节序列
四、实现
1、JDK类库中序列化API:
java.io.ObjectOutputStream:表示对象输出流,writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中
java.io.ObjectInputStream:表示对象输入流,readObject()方法源输入流中读取字节序列,再把它们反序列化成为一个对象,并将其返回
2、实现序列话接口
1、Serializable :序列化:调用writeObject(ObjectOutputStream out)方法
反序列化:调用readObject(ObjectInputStream in)方法
2、Externalnalizable:序列化:实现writeExternal(ObjectOutput out)方法
反序列化:实现readExternal(ObjectInput in)方法
五、实例
import java.io.*; public class book implements Externalizable { private String name; private String desc; private float price; public book() { } public book(String name, String desc, float price) { this.name = name; this.desc = desc; this.price = price; } @Override public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(name); out.writeObject(desc); out.writeFloat(price); } @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { this.name = (String) in.readObject(); this.desc = (String) in.readObject(); this.price = in.readFloat(); } }