Java序列化(Serializable)与反序列化__1

Java序列化(Serializable)与反序列化__1

ID:63496641

大小:17.79 KB

页数:13页

时间:2021-08-24

Java序列化(Serializable)与反序列化__1_第1页
Java序列化(Serializable)与反序列化__1_第2页
Java序列化(Serializable)与反序列化__1_第3页
Java序列化(Serializable)与反序列化__1_第4页
Java序列化(Serializable)与反序列化__1_第5页
资源描述:

《Java序列化(Serializable)与反序列化__1》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Java序列化(Serializable)与反序列化_序列化是干什么的简洁说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存objectstates,但是Java给你供应一种应当比你自己好的保存对象状态的机制,那就是序列化。什么状况下需要序列化当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;当你想用套接字在网络上传送对象的时候;当你想通过RMI传输对象的时候;序列化的几种方式在Java中socket传输数据时,数据类型往往比较难选择。可

2、能要考虑带宽、跨语言、版本的兼容等问题。比较常见的做法有两种:一是把对象包装成JSON字符串传输,二是采纳java对象的序列化和反序列化。随着Google工具protoBuf的开源,protobuf也是个不错的选择。对JSON,ObjectSerialize,ProtoBuf做个对比。ObjectSerializeJava的序列化机制是通过在运行时推断类的serialVersionUID来验证版本全都性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行

3、比较,假如相同就认为是全都的,可以进行反序列化,否则就会消失序列化版本不全都的特别。serialVersionUID用来表明类的不同版本间的兼容性。有两种生成方式:一个是默认的1L,比如:privatestaticfinallongserialVersionUID=1L;一个是依据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:privatestaticfinallongserialVersionUID=xxxxL;下面来商量Java类中为什么需要重载serialVersionUID属性?当两个进程在进行远程通信时,彼此可

4、以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再复原为Java对象。把Java对象转换为字节序列的过程称为对象的序列化。把字节序列复原为Java对象的过程称为对象的反序列化。对象的序列化主要有两种用途:(1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(2)在网络上传送对象的字节序列;java.io.ObjectOutputStream代表对象输出流,它的writeObject(Objectobj)方法可对参

5、数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。java.io.ObjectInputStream代表对象输入流,它的readObject()方法从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回。只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自Serializable接口,实现Externalizable接口的类完全由自身来掌握序列化的行为,而仅实现Serializable接口的类可以采纳默认的序列化方式。凡是实现Se

6、rializable接口的类都有一个表示序列化版本标识符的静态变量:privatestaticfinallongserialVersionUID;类的serialVersionUID的默认值完全依靠于Java编译器的实现,对于同一个类,用不同的Java编译器编译,有可能会导致不同的serialVersionUID,也有可能相同。为了提高serialVersionUID的独立性和确定性,剧烈建议在一个可序列化类中显示的定义serialVersionUID,为它给予明确的值。显式地定义serialVersionUID有两种用途:在某些场合,盼

7、望类的不同版本对序列化兼容,因此需要确保类的不同版本具有相同的serialVersionUID;在某些场合,不盼望类的不同版本对序列化兼容,因此需要确保类的不同版本具有不同的serialVersionUID。当你序列化了一个类实例后,盼望更改一个字段或添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序化旧有实例,并在反序列化时抛出一个特别。假如你添加了serialVersionUID,在反序列旧有实例时,新添加或更改的字段值将设为初始化值(对象为null,基本类型为相应的初始默认值),字段被删除将不设置。

8、相关留意事项:a)序列化时,只对对象的状态进行保存,而不管对象的方法;b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;c)当一个对象的实例变量引用其他

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

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

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