java序列化原理机制浅谈.docx

java序列化原理机制浅谈.docx

ID:51769448

大小:175.74 KB

页数:12页

时间:2020-03-15

java序列化原理机制浅谈.docx_第1页
java序列化原理机制浅谈.docx_第2页
java序列化原理机制浅谈.docx_第3页
java序列化原理机制浅谈.docx_第4页
java序列化原理机制浅谈.docx_第5页
资源描述:

《java序列化原理机制浅谈.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、什么是序列化 java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以读取字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI、hessian等技术都是以此为基础的。  so,序列化一般用于以下场景: 1:永久性保存对象,保存对象的字节序列到本地文件或者数据库中2:通过序列化以字节流的形式使对象在网络中进行传递和接收;3:通过序列化在进程间传递对象。  接下来我们将从序列化机

2、制原理等方面进行剖析 如何序列化一个对象类通过实现java.io.Serializable接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。 1:我们先来看看一个例子将对象序列化为一个字节流 我们将对象序列化并输出。ObjectOutputStream能把Object输出成Byte流。---上图显示的20行-26行我们将Byte流暂时存储到temp.out文件里。而在33行-39行,我们利用反序列化,根据字节流重建对象。 从上

3、面代码中,我们不难看出,序列化和反序列化的俩个主要类:ObjectOutputStream、ObjectInputStream。 序列化后的内容通过上面的例子我们知道,对象被序列化存在至文件temp.out中,我们可以通过工具UltraEdit以16进制方式打开该文件,看看它里面是以什么样的形式存在组织我们的对象的。        每一行分号后面的内容都是前面16进制码的注释。对于这些我们先随意YY下,这些内容的组织方式应该是:1:对象类型描述2:对象属性类型描述3:对象属性值 现在我们将以一个全面的例子来说明该问题:代码-1.1  [java

4、script] viewplaincopy1.class parent implements Serializable {  2.    int parentVersion = 10;  3.}  4.class contain implements Serializable {  5.    int containVersion = 11;  6.}  7.public class SerialTest extends parent implements Serializable {  8.    int     version = 66; 

5、 9.    contain con     = new contain();  1.    public int getVersion() {  2.        return version;  3.    }  4.    public static void main(String args[]) throws IOException {  5.        FileOutputStream fos = new FileOutputStream("temp_1.out");  6.        ObjectOutputStream

6、 oos = new ObjectOutputStream(fos);  7.        SerialTest st = new SerialTest();  8.        oos.writeObject(st);  9.        oos.flush();  10.        oos.close();  11.    }  12.}    temp_1.out文件内容如下:  先对上面图简单注释下:0000000h-000000c0h表示行号(我们一次可以称为第一行,第二行…………),0~f表示列;行后面的文字表示对这行16

7、进制的解释。 我们来仔细看看这些字节都是些说明东西。第一行的:0列-4列1.ACED:STREAM_MAGIC.声明使用了序列化协议.可以理解为实现了Serializable类2.0005:STREAM_VERSION.序列化协议版本.3.0x73:TC_OBJECT.声明这是一个新的对象. 因此第一步存储的就是序列化的描述。 二:输出SerialTest类的描述:第一行的5列到三行的7列1:4.0x72:TC_CLASSDESC.声明这里开始一个新Class。2.0015:Class名字的长度(包括package名称:如本例就是:testSe

8、rial.SerialTest;正好21的长度,16进制表示就为15了).3.7465737453657269 616C2E53657269616c5

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。