1、什么是java序列化
Java
序列化
API
提供一种处理对象序列化的标准机制。序列化(Serialization)是指将java对象用一连串字节描述的一个过程;反序列化(deserialization)是一种将这一串字节构建成一个对象的过程。
2、序列化的作用(必要性)
Java中,一切都是对象,在分布式环境中经常需要将对象从这一端网络或设备传递到另一端。Java
序列化机制就是一种解决在网络两端传输数据的问题而产生的协议。下图表示客户端/服务器之间通信,一个对象是从客户端传送到服务器通过序列化的视图。
3、如何序列化一个对象
为序列化一个对象,你需确保对象类实现Serializable接口。Serializable接口没有方法,只要实现了序列化接口,Class
就能被序列化机制处理。
示例代码,需序列化的java对象:
1 import java.io.Serializable;
2
3 public class TestClassSerial implements Serializable {
4 public byte version = 100;
5 public byte count = 0;
6 }
示例代码,
把TestClassSerial对照象
输出成
Byte
流,存储到
temp.out
文件里:
1 public static void main(String args[]) throws IOException {
2 FileOutputStream fos = null;
3 ObjectOutputStream oos = null;
4 try {
5 fos = new FileOutputStream("c:/temp.out");
6 oos = new ObjectOutputStream(fos);
7 TestClassSerial tcs = new TestClassSerial();
8 oos.writeObject(tcs);
9 oos.flush();
10 }
11 finally {
12 if(oos != null) {
13 oos.close();
14 }
15 if(fos != null) {
16 fos.close();
17 }
18 }
19 }
示例代码,
从持久的文件中读取
Bytes
重建对象:
1 public static void main1(String args[]) throws IOException {
2 FileInputStream fis = null;
3 ObjectInputStream oin = null;
4 try {
5 fis = new FileInputStream("c:/temp.out");
6 oin = new ObjectInputStream(fis);
7 TestClassSerial tcs = (TestClassSerial) oin.readObject();
8 System.out.println("version="+tcs.version);
9 }
10 finally {
11 if(fis != null) {
12 fis.close();
13 }
14 if(oin != null) {
15 oin.close();
16 }
17 }
18 }
执行结果为:100.
4、对象的序列化格式
TestClassSerial对象序列化输出的
temp.out
文件,以
16
进制方式显示,内容如下:
AC ED 00 05 73 72 00 0A 53 65 72 69 61 6C 54 65
73 74 A0 0C 34 00 FE B1 DD F9 02 00 02 42 00 05
63 6F 75 6E 74 42 00 07 76 65 72 73 69 6F 6E 78
70 00 64
这些二进制字节就是用来描述序列化以后的TestClassSerial对象的,我们注意到
TestSerial
类中只有两个域:
1 public byte version = 100;
2 public byte count = 0;
都是
byte
型,理论上存储这两个域只需要
2
个
byte
,但是实际上
temp.out
占据空间为
51bytes
,也就是说除了数据以外,还包括了对序列化对象的其他描述。
5、Java
的序列化算法
序列化算法一般会按步骤做如下事情:
1、将对象实例相关的类的元数据输出;
2、递归地输出类的超类元数据描述直到不再有超类;
3、类元数据完了以后,开始从最顶层的超类开始输出对象实例的实际数据值;
4、从上至下递归输出实例的数据;
更多序例化事例及二进制字节含义参考文档:http://my.oschina.net/god/blog/1291
posted on 2010-12-16 14:52
josson 阅读(803)
评论(0) 编辑 收藏 所属分类:
java 开发