一、前言
序列化及反序列化意义 在java中对象序列化是处理对象流的一种机制,是将对象内容流化写入到字节流,而反序列化是向反的-从字节流中读取并还原为对象的过程。序列化后可以使用各种I/O流保存到文件或者通过网络将对象数据发送到另外一个主机,对象序列化在RMI、Socket、Jms及Ejb应用中,它是为解决对象在磁盘上读写操作和网络上传递除了问题才提出,序列化后可以通过writeObject()方便向特定文件或者网络输出对象,另外通过readObject()方法方便地接受该对象。
二、序列化应用场景
1.永久性保存对象,对象所有字节序列都到本地文件
2.实现分布式对象,通过RMI利用对象序列化进行远程主机的服务,与本地机上运行对象相同
3.通过序列化对象在网络中传递网络中
4.通过序列化在进程间传递对象
三、序列化方法
一种是选择实现Seriallizble接口,另一种是实现Exrializble
a.实现Seriallizble接口,该接口不需要实现其他任何方法
pubic class stu implements Serializable{@b@ @b@ private String name;@b@ private int age;@b@ @b@ ...@b@}
b.实现Externalizable,需要是实现writeExternal()和readExternal()方法,具体如下:
public class stu implements Externalizable{@b@ @b@ private String name;@b@ private int age;@b@ @b@ ...@b@ public void readExternal(ObjectInput in) throws IOException,ClassNotFoudException{@b@ name=(String)in.readObject();@b@ age=in.readInt();@b@ @b@ }@b@@b@ public void writeExternal(ObjectOutput out)throws IOException,ClassNotFoudException{@b@ out.writeObject(name);@b@ out.writeInt(age);@b@ }@b@ ...@b@}
四、总结
对于上面两种序列化方法,一般习惯使用第一种,因为接口实现简单。对于类中不需要序列化的属性需要使用static和transient关键词修饰。