《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化

2.4.6 为克隆使用序列化

序列化机制有一种很有趣的用法:即提供了一种克隆对象的简便途径,只要对应的类是可序列化的即可。其做法很简单:直接将对象序列化到输出流中,然后将其读回。这样产生的新对象是对现有对象的一个深拷贝(deep copy)。在此过程中,我们不必将对象写出到文件中,因为可以用ByteArrayOutputStream将数据保存到字节数组中。
正如程序清单2-4所示,要想得到clone方法,只需扩展SerialCloneable类,这样就完事了。
程序清单2-4 serialClone/SerialCloneTest.java



我们应该当心这个方法,尽管它很灵巧,但是它通常会比显式地构建新对象并复制或克隆数据域的克隆方法慢得多。

时间: 2024-10-27 22:47:27

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.6 为克隆使用序列化的相关文章

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.4 序列化单例和类型安全的枚举

2.4.4 序列化单例和类型安全的枚举 在序列化和反序列化时,如果目标对象是唯一的,那么你必须加倍当心,这通常会在实现单例和类型安全的枚举时发生. 如果你使用Java语言的enum结构,那么你就不必担心序列化,它能够正常工作.但是,假设你在维护遗留代码,其中包含下面这样的枚举类型: 这种风格在枚举被添加到Java语言中之前是很普遍的.注意,其构造器是私有的.因此,不可能创建出超出Orientation.HORIZONTAL和Orientation.VERTICAL之外的对象.特别是,你可以使用=

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一导读

前 言 致读者 本书是按照Java SE 8完全更新后的<Java核心技术 卷Ⅱ 高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员. 编写任何一本书籍都难免会有一些错误或不准确的地方.我们非常乐意听到读者的意见.当然,我们更希望对本书问题的报告只听到一次.为此,我们创建了一个FAQ.bug修正以及应急方案的网站http:/

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一第3章 XML

第3章 XML ▲ XML概述 ▲ 使用命名空间 ▲ 解析XML文档 ▲ 流机制解析器 ▲ 验证XML文档 ▲ 生成XML文档 ▲ 使用XPath来定位信息 ▲ XSL转换 Don Box等人在其合著的<Essential XML>(Addison-Wesley出版社2000年出版)的前言中半开玩笑地说道:"可扩展标记语言(Extensible Markup Language,XML)已经取代了Java.设计模式.对象技术,成为软件行业解决世界饥荒的方案."确实,正如你将在

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4.2 理解对象序列化的文件格式

2.4.2 理解对象序列化的文件格式 对象序列化是以特殊的文件格式存储对象数据的,当然,你不必了解文件中表示对象的确切字节序列,就可以使用writeObject/readObject方法.但是,我们发现研究这种数据格式对于洞察对象流化的处理过程非常有益.因为其细节显得有些专业,所以如果你对其实现不感兴趣,则可以跳过这一节. 每个文件都是以下面这两个字节的"魔幻数字"开始的 后面紧跟着对象序列化格式的版本号,目前是 (我们在本节中统一使用十六进制数字来表示字节.)然后,是它包含的对象序列

《Java语言导学(原书第6版)》一导读

前 言 自2010年年初Oracle公司收购Sun公司以来,Java语言迎来激动人心的时代.正如Java Community Process计划的活动所印证的,Java语言将不断发展.本书基于Java SE 8(Java Platform Standard Edition 8)并引用其API. 相比本书第5版(针对的是Java版本7),第6版有一些新特点: Lambda表达式使得功能可作为方法参数使用,代码作为数据使用.Lambda表达式描述单个方法接口(也称为功能接口)的实例会更简洁.4.4.

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.8 XSL转换

3.8 XSL转换 XSL转换(XSLT)机制可以指定将XML文档转换为其他格式的规则,例如,转换为纯文本.XHTML或任何其他的XML格式.XSLT通常用来将某种机器可读的XML格式转译为另一种机器可读的XML格式,或者将XML转译为适于人类阅读的表示格式. 你需要提供XSLT样式表,它描述了XML文档向某种其他格式转换的规则.XSLT处理器将读入XML文档和这个样式表,并产生所要的输出(参见图3-7). XSLT规范很复杂,已经有很多书描述了该主题.我们不可能讨论XSLT的全部特性,所以我们

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.6.1 使用SAX解析器

3.6.1 使用SAX解析器 SAX解析器在解析XML输入数据的各个组成部分时会报告事件,但不会以任何方式存储文档,而是由事件处理器建立相应的数据结构.实际上,DOM解析器是在SAX解析器的基础上构建的,它在接收到解析器事件时构建DOM树. 在使用SAX解析器时,需要一个处理器来为各种解析器事件定义事件动作.ContentHandler接口定义了若干个在解析文档时解析器会调用的回调方法.下面是最重要的几个: startElement和endElement在每当遇到起始或终止标签时调用. char

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.1.2 完整的流家族

2.1.2 完整的流家族 与C语言只有单一类型FILE*包打天下不同,Java拥有一个流家族,包含各种输入/输出流类型,其数量超过60个!请参见图2-1和图2-2. 让我们把输入/输出流家族中的成员按照它们的使用方法来进行划分,这样就形成了处理字节和字符的两个单独的层次结构.正如所见,InputStream和OutputStream类可以读写单个字节或字节数组,这些类构成了图2-1所示的层次结构的基础.要想读写字符串和数字,就需要功能更强大的子类,例如,DataInputStream和DataO