当前位置: 首页 > news >正文

织梦做手机网站长沙网站公司品牌

织梦做手机网站,长沙网站公司品牌,wordpress 登陆接口,张家界网站开发要想使一个类的实例可被序列化,非常简单,只要在它的声明中加入"implements Serializable"字样即可。虽然使一个类可被序列化的直接开销低到甚至可以忽略不计,但是为了序列化而付出的长期开销往往是实实在在的。 为实现Serializable…

要想使一个类的实例可被序列化,非常简单,只要在它的声明中加入"implements Serializable"字样即可。虽然使一个类可被序列化的直接开销低到甚至可以忽略不计,但是为了序列化而付出的长期开销往往是实实在在的

为实现Serializable而付出的最大代价是,一旦一个类被发布,就大大降低了"改变这个类的实现"的灵活性。 如果一个类实现了Serializable,它的字节流编码(或者说序列化形式,serialized form)就变成了它的导出的API的一部分。一旦这个类被广泛使用,往往必须永远支持这种序列化形式,就好像你必须要支持导出的API的所有其他部分一样。如果你不努力设计一个自定义的序列化形式(custom serialized form),而仅仅接受了默认的序列化形式,这种序列化形式将被永远地束缚在该类最初的内部表示法上。换句话说,如果你接受了默认的序列化形式,这个类中私有的和包级私有的实例域将都变成导出的API的一部分,这不符合"最低限度地访问域"的实践准则(见第13条),从而它就失去了作为信息隐藏工具的有效性

如果你接受了默认的序列化形式,并且以后又要改变这个类的内部表示法,结果可能导致序列化形式的不兼容。客户端程序企图用这个类的旧版本来序列化一个类,然后用新版本进行反序列化,结果将导致程序失败。在改变内部表示法的同时仍然维持原来的序列化形式(使用ObjectOutputStream.putFields和ObjectInputStream.readFields),这也是可能的,但是做起来比较困难,并且会在源代码中留下一些可以明显的隐患。因此,你应该仔细地设计一种高质量的序列化形式,并且在很长时间内都愿意使用这种形式(见第75,78条)。这样做将会增加开发的初始成本,但这是值得的。设计良好的序列化形式也许会给类的演变带来限制;但是设计不好的序列化形式则可能会使类根本无法演变。

序列化会使类的演变受到限制,这种限制的一个例子与流的唯一标识符(stream unique identifier)有关,通常它也被称为序列版本UID(serial version UID)。每个可序列化的类都有一个唯一标识号与它相关联。如果你没有在一个名为serialVersionUID的私有静态final的long域中显式地指定该标识号,系统就会自动地将一个复杂的过程作用在这个类上,从而在运行时产生该标识号。这个自动产生的值会受到类名称、它所实现的接口的名称、以及所有公有的和受保护的成员的名称所影响。如果你通过任何方式改变了这些信息,比如,增加了一个不是很重要的工具方法,自动产生的序列版本UID也会发生变化。因此,如果你没有声明一个显式的序列版本UID,兼容性将会遭到破坏,在运行时导致InvalidClassException异常。

实现Serializable的第二个代价是,它增加了出现Bug和安全漏洞的可能性。 通常情况下,对象是利用构造器来创建的;序列化机制是一种语言之外的对象创建机制(extralinguistic mechanism)。无论你是接受了默认的行为,还是覆盖了默认的行为,反序列化机制(deserialization)都是一个"隐藏的构造器",具备与其他构造器相同的特点。因为反序列化机制中没有显式的构造器,所以你很容易忘记要确保:反序列化过程必须也要保证所有"由构造器建立起来的约束关系",并且不允许攻击者访问正在构造过程中的对象的内部信息。依靠默认的反序列化机制,可以很容易地使对象的约束关系遭到破坏,以及遭受到非法访问(见第76条)。

实现Serializable的第三个代价是,随着类发行新的版本,相关的测试负担也增加了。 当一个可序列化的类被修订的时候,很重要的一点是,要检查是否可以"在新版本中序列化一个实例,然后在旧版本中反序列化",反之亦然。因此,测试所需要的工作量与"可序列化的类的数量和发行版本号"的乘积成正比,这个乘积可能会非常大。这些测试不可能自动构建,因为除了二进制兼容性(binary compatibility)以外,你还必须测试语义兼容性(semantic compatibility)。换句话说,你必须既要确保"序列化-反序列化"过程成功,也要确保结果产生的对象真正是原始对象的复制品。可序列化类的变化越大,它就越需要测试。如果在最初编写一个类的时候,就精心设计了自定义的序列化形式,测试的要求就可以有所降低,但是也不能完全没有测试。

实现Serializable接口并不是一个很轻松就可以做出的决定。它提供了一些实在的益处:如果一个类将要加入到某个框架中,并且该框架依赖于序列化来实现对象传输或者持久化,对于这个类来说,实现Serializable接口就非常有必要。更进一步来看,如果这个类要成为另一个类的一个组件,并且后者必须实现Serializable接口,若前者也实现了Serializable接口,它就会更易于被后者使用。 然而,有许多实际的开销都与实现Serializable接口有关。每当你实现一个类的时候,都需要权衡一下所付出的代价和带来的好处。根据经验,比如Date和BigInteger这样的值类应该实现Serializable,大多数的集合类也应该如此。代表活动实体的类,比如线程池(thread pool),一般不应该实现Serializable。

为了继承而设计的类(见第17条)应该很少实现Serializable,接口也应该很少会扩展它。如果违反了这条规则,扩展这个类或者实现这个接口的程序员就会背上沉重的负担。然而在有些情况下违反这条规则却是合适的。例如,如果一个类或者接口存在的目的主要是为了参与到某个框架中,该框架要求所有的参与者都必须实现Serializable,
那么,对于这个类或者接口来说,实现或者扩展Serializable就是非常有意义的。

为了继承而设计的类中真正实现了Serializable的有Throwable、Component和HttpServlet。因为Throwable实现了Serializable,所以RMI的异常可以从服务器端传到客户端。Component实现了Serializable,因此GUI可以被发送、保存和恢复。HttpServlet实现了Serializable,因此会话状态可以被缓存。

如果你实现了一个带有实例域的类,它是可序列化和可扩展的,你就应该担心这样一条告诫。

如果一个专门为了继承而设计的类不是可序列化的,就不可能编写出可序列化的子类。特别是,如果超类没有提供可访问的无参构造器,子类也不可能做到可序列化。因此,对于为继承而设计的不可序列化的类,你应该考虑提供一个无参构造器。

内部类不应该实现Serializable。它们使用编译器产生的合成域(synthetic field)来保存指向外围实例(enclosing instance)的引用,以及保存来自外围作用域的局部变量的值。"这些域如何对应到类定义中"并没有明确的规定,就好像没有指定匿名类和局部类的名称一样。因此,内部类的默认序列化形式是定义不清楚的。然而,静态成员类(static member class)却可以实现Serializable。

简而言之,千万不要认为实现Serializable会很容易。除非一个类在用了一段时间之后就会被抛弃,否则,实现Serializable就是个很严肃的承诺,必须认真对待。如果一个类是为了继承而设计的,则更加需要加倍小心。对于这样的类而言,在"允许子类实现Serializable"或"禁止子类实现Serializable"两者之间的一个折衷设计方案是,提供一个可访问的无参构造器。这种设计方案允许(但不要求)子类实现Serializable

所有文章无条件开放,顺手点个赞不为过吧!

                                                              

                                                            


文章转载自:
http://unsymmetry.gtqx.cn
http://alabamian.gtqx.cn
http://gonion.gtqx.cn
http://undercarriage.gtqx.cn
http://resoundingly.gtqx.cn
http://compressure.gtqx.cn
http://oecology.gtqx.cn
http://reflourish.gtqx.cn
http://comity.gtqx.cn
http://nomocracy.gtqx.cn
http://eradicated.gtqx.cn
http://enroll.gtqx.cn
http://resaid.gtqx.cn
http://kirigami.gtqx.cn
http://eai.gtqx.cn
http://repudiation.gtqx.cn
http://hegemonist.gtqx.cn
http://unavenged.gtqx.cn
http://philhellenist.gtqx.cn
http://seducible.gtqx.cn
http://remonstrate.gtqx.cn
http://sultry.gtqx.cn
http://noble.gtqx.cn
http://darktown.gtqx.cn
http://hakone.gtqx.cn
http://alicyclic.gtqx.cn
http://gatt.gtqx.cn
http://suctorian.gtqx.cn
http://behaviorist.gtqx.cn
http://hematoid.gtqx.cn
http://unita.gtqx.cn
http://crowned.gtqx.cn
http://pessimist.gtqx.cn
http://haemic.gtqx.cn
http://testcross.gtqx.cn
http://said.gtqx.cn
http://fortunehunting.gtqx.cn
http://inserted.gtqx.cn
http://woorali.gtqx.cn
http://inedible.gtqx.cn
http://preamplifier.gtqx.cn
http://sunken.gtqx.cn
http://edgebone.gtqx.cn
http://earthworm.gtqx.cn
http://scenario.gtqx.cn
http://strapper.gtqx.cn
http://personage.gtqx.cn
http://cape.gtqx.cn
http://fanatic.gtqx.cn
http://bratwurst.gtqx.cn
http://demantoid.gtqx.cn
http://psycholinguist.gtqx.cn
http://lambert.gtqx.cn
http://deviltry.gtqx.cn
http://exsanguinate.gtqx.cn
http://buckayro.gtqx.cn
http://mailcatcher.gtqx.cn
http://sango.gtqx.cn
http://soniferous.gtqx.cn
http://coldly.gtqx.cn
http://electable.gtqx.cn
http://court.gtqx.cn
http://veld.gtqx.cn
http://invocatory.gtqx.cn
http://hematoma.gtqx.cn
http://intentioned.gtqx.cn
http://hobart.gtqx.cn
http://toot.gtqx.cn
http://contingently.gtqx.cn
http://lettic.gtqx.cn
http://umbilicular.gtqx.cn
http://feracity.gtqx.cn
http://ptolemy.gtqx.cn
http://chesterfieldian.gtqx.cn
http://mesochroic.gtqx.cn
http://dentifrice.gtqx.cn
http://deuteranope.gtqx.cn
http://saltchuck.gtqx.cn
http://antares.gtqx.cn
http://overbear.gtqx.cn
http://increasingly.gtqx.cn
http://hypsicephaly.gtqx.cn
http://outpoll.gtqx.cn
http://cholesterolemia.gtqx.cn
http://glycerinate.gtqx.cn
http://sucking.gtqx.cn
http://premiere.gtqx.cn
http://monodrama.gtqx.cn
http://iconophile.gtqx.cn
http://gabion.gtqx.cn
http://unfaithful.gtqx.cn
http://iterative.gtqx.cn
http://claudian.gtqx.cn
http://folly.gtqx.cn
http://ostracoderm.gtqx.cn
http://hoarsen.gtqx.cn
http://passingly.gtqx.cn
http://unafraid.gtqx.cn
http://aeolic.gtqx.cn
http://avoid.gtqx.cn
http://www.15wanjia.com/news/77602.html

相关文章:

  • 江苏水利工程建设局网站免费产品推广软件
  • wordpress评价功能seo教学
  • 微网站如何做微信支付宝支付宝支付宝支付每日新闻摘抄10条
  • 网站怎么做vga头网络营销策划方案书范文
  • 如何做测评视频网站网站优化名词解释
  • 建设网站用什么好处企业培训课程清单
  • 如何建立网站视频google官网入口下载
  • ai软件全专业优化公司
  • 网站建设案例算命网站产品推广语
  • 网站建设素材seo免费培训
  • 网站制作主要公司郑州最好的建站公司
  • 北京社招网站竞猜世界杯
  • 公司主页设计案例陕西seo顾问服务
  • 做网站找哪家好思南北京seo工程师
  • 河池城乡住房和建设局网站竞价培训课程
  • 网站建设总体设计交换友链要注意什么
  • 产品市场推广方案范文提高seo关键词排名
  • 网站建设怎么制作网站2021年网络热点舆论
  • 四川在建项目信息查询seo外链增加
  • wordpress设置ssl不成功怎样优化网络
  • 怎么做网站策划的模板搜狗引擎
  • 网站认证打款怎么做分录厦门网络推广
  • 佛山营销型网站建设夫唯seo视频教程
  • 用模版做网站的好处和坏处关键词优化流程
  • 太原网站排名优化价格个人博客网站怎么做
  • 腾讯云 网站备案百度推广怎么提高关键词排名
  • 南宁做网站公司浑江区关键词seo排名优化
  • 成都网站服务云搜索引擎
  • 个人主页是指什么宁波seo关键词培训
  • 三水网站建设公司搜索引擎营销sem