序列化的一些思考

什么是Java序列化
Java提供了两种对象持久化的方式,分别为序列化和反序列化。
(1)序列化:
在分布式环境下,当进行远程通信时,无论何种类型的数据,都会以二进制序列的形式在网络上传送。序列化是一种将对象一连串的字节描述的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库系统里,并在需要时把该流读取出来重新构造一个相同的对象。
所有要实现序列化的类都必须实现Serializable接口,serializable接口位于Java.lang包中,它里面没有包含任何方法。使用一个输出流来构造一个objectoutputStream对象,紧接着,使用该对象的writeObject方法可以将obj对象写出来,要恢复时可以使用其对应的输入流。
特点:1.一个类被序列化,那么他的子类也能够被序列化。
2.由于static代表类的成员,transient代表对象的临时数据,因此被声明为这两种类型的数据成员是不能被序列化的。
3.Java提供了多个对象序列化的接口:objectOutput、Objectput、ObjectOutStream和ObjectPutStream.
4.由于序列化的使用会影响系统的性能,因此如果不是必须使用序列化,应尽可能不要使用序列化。那么在什么情况下需要使用序列化呢?
1.需要通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中。
2.序列化能实现深复制,即可以复制引用的对象(复制的不是一个对象)。

与序列化相对的是反序列化,它将流转换成对象。在序列化和反序列化的过程中serialVersionUID起着非常重要的作用。
1.提高程序的运行效率
2.提高程序不同平台上的兼容性
3.增强各个版本的可兼容性



3.外部序列化:外部序列化与序列化主要的区别在于序列化是内置的API只需要实现Serializable接口,而外部序列化时使用Externalizable接口,接口的方法由开发人员实现。

 

转载于:https://my.oschina.net/architectliuyuanyuan/blog/3098943

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值