首页>java频道>java教程>正文
关于Java序列化的机制和原理

www.zige365.com 2010-6-7 12:13:29 点击:发送给好友 和学友门交流一下 收藏到我的会员中心

有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍。

Java序列化算法透析

Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的。

序列化的必要性

Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端。这就需要有一种可以在两端传输数据的协议。Java序列化机制就是为了解决这个问题而产生。

如何序列化一个对象

一个对象能够序列化的前提是实现Serializable接口,Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。

  1. import java.io.Serializable;  
  2.  
  3. class TestSerial implements Serializable {  
  4.  
  5.        public byte version = 100;  
  6.  
  7.        public byte count = 0;  
  8.  

然后我们写个程序将对象序列化并输出。ObjectOutputStream能把Object输出成Byte流。我们将Byte流暂时存储到temp.out文件里。

  1. public static void main(String args[]) throws IOException {  
  2.  
  3.        FileOutputStream fos = new FileOutputStream("temp.out");  
  4.  
  5.        ObjectOutputStream oos = new ObjectOutputStream(fos);  
  6.  
  7.        TestSerial ts = new TestSerial();  
  8.  
  9.        oos.writeObject(ts);  
  10.  
  11.        oos.flush();  
  12.  
  13.        oos.close();  
  14.  

如果要从持久的文件中读取Bytes重建对象,我们可以使用ObjectInputStream  

  1. public static void main(String args[]) throws IOException {  
  2.  
  3.        FileInputStream fis = new FileInputStream("temp.out");  
  4.  
  5.        ObjectInputStream oin = new ObjectInputStream(fis);  
  6.  
  7.        TestSerial ts = (TestSerial) oin.readObject();  
  8.  
  9.        System.out.println("version="+ts.version);  
  10.  

执行结果为

100.

对象的序列化格式

将一个对象序列化后是什么样子呢?打开刚才我们将对象序列化输出的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

这一坨字节就是用来描述序列化以后的

TestSerial对象的,我们注意到TestSerial类中只有两个域:

public byte version = 100;

本新闻共4页,当前在第1页  1  2  3  4  

我要投稿 新闻来源: 编辑: 作者:
相关新闻
关于Java路径的分类与使用注意事项
关于Java EE架构原理探秘及企业级应用
浅谈Java企业级应用架构设计中的分布式结构
浅谈正则表达式操作符参考列表
关于Java连接池总结复习及推荐