敢于java的序列化几点小说明

这是开始文章http://blog.csdn.net/tlycherry/article/details/8986720。(我引用他人的)最少你要了解到

1、什么是序列化

2、对象流是什么(可以思考下原型模式)

3、序列化能做什么

4、实现序列化的方法

5、序列化的特点

进入正题:

序列化定义:用来将对象编码成字节流,并从字节流编码中重新构建对象。

序列化的好处:一旦一个对象被序列化,它的编码就可以从一台正在运行的虚拟机被传递到另一台虚拟机上,或者被存储到磁盘上,供以后反序列化使用。(对象序列化是java的一个特征,通过该特征可以将对象写作一组字节码,当在其他位置读到这些字节码时,可以依此创建一个新的对象,而且新对象的状态与原对象完全相同。*

序列化的局限/代价:1、实现序列化接口的类,被发布后,修改的灵活性大大降低。序列化会使得类的演变受到限制,因为序列版本UID

2、增加了出现bug和安全漏洞的可能性。序列化机制是一种语言外的对象创建机制(*是解释)

3、随着发行版本,相关测试负担增加。当一个课序列化的类被修订后,要检查是否可以“在新的版本中序列化一个实例,然后在旧版本中反序列化”反之亦然。

实现序列化的场景:1、如果一个类要加入到某个框架中,并且该框架依赖序列化来实现对象传输或者持久化,这个类需要实现序列化接口。

2、一个类要成为另一个类的组件,并且后者必须实现序列化接口,前者实现序列化接口它就更容易被后者使用。

3、为了继承而设计的类应该尽量少的去实现序列化接口,用户接口也应该尽可能的少继承序列化接口。如果一个专门为了继承而设计的类是不可以序列化的,那就不要编写可以序列化的子类。特别是父类没有提供可以访问的无参构造方法,子类也不可能做到序列化

在为了继承而设计的类中,真正实现了序列化接口的有Throwable类,Component类和HttpServlet抽象类。(是不是之前都没想过为什么要实现序列化接口 就直接借用eclipse这种软件生成了呀)

最好在所有的约束关系都已经建立的情况下再创建对象。如果微力建立这些约束关系而要求客户端提供一些数据,这实际上就排除了使用无参构造器的可能性。盲目地为了一个类增加无参构造器和单独的初始化方法,而它的约束关系仍由其他构造器来建立,这样会使得该类的状态空间更加复杂,并增加了出错的可能性。

一点小经验:Date和Biginteger,大多数集合类应该实现序列化接口,代表活动实体的类不应该实现序列化接口。

实现序列化的时候要慎重。

下一篇讲自定义的序列化形式



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章