《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4 对象输入/输出流与序列化

2.4 对象输入/输出流与序列化

当你需要存储相同类型的数据时,使用固定长度的记录格式是一个不错的选择。但是,在面向对象程序中创建的对象很少全部都具有相同的类型。例如,你可能有一个称为staff的数组,它名义上是一个Employee记录数组,但是实际上却包含诸如Manager这样的子类实例。
我们当然可以自己设计出一种数据格式来存储这种多态集合,但是幸运的是,我们并不需要这么做。Java语言支持一种称为对象序列化(object serialization)的非常通用的机制,它可以将任何对象写出到输出流中,并在之后将其读回。(你将在本章稍后看到“序列化”这个术语的出处。)

时间: 2024-09-19 11:25:51

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.4 对象输入/输出流与序列化的相关文章

《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版)》一2.1.2 完整的流家族

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

《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.3.2 随机访问文件

2.3.2 随机访问文件 RandomAccessFile类可以在文件中的任何位置查找或写入数据.磁盘文件都是随机访问的,但是与网络套接字通信的输入/输出流却不是.你可以打开一个随机访问文件,只用于读入或者同时用于读写,你可以通过使用字符串"r"(用于读入访问)或"rw"(用于读入/写出访问)作为构造器的第二个参数来指定这个选项. 当你将已有文件作为RandomAccessFile打开时,这个文件并不会被删除. 随机访问文件有一个表示下一个将被读入或写出的字节所处位

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.1 输入/输出流

2.1 输入/输出流 在Java API中,可以从其中读入一个字节序列的对象称做输入流,而可以向其中写入一个字节序列的对象称做输出流.这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块.抽象类InputStream和OutputStream构成了输入/输出(I/O)类层次结构的基础.注意:这些输入/输出流与在前一章中看到的流没有任何关系.为了清楚起见,只要是讨论用于输入和输出的流,我们都将使用术语输入流.输出流或输入/输出流. 因为面向字节的流不便于处理

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.1.3 组合输入/输出流过滤器

2.1.3 组合输入/输出流过滤器 FileInputStream和FileOutputStream可以提供附着在一个磁盘文件上的输入流和输出流,而你只需向其构造器提供文件名或文件的完整路径名.例如: 这行代码可以查看在用户目录下名为"employee.dat"的文件. 提示:所有在java.io中的类都将相对路径名解释为以用户工作目录开始,你可以通过调用System.getProperty("user.dir")来获得这个信息. 警告:由于反斜杠字符在Java字符

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.1 如何写出文本输出

2.2.1 如何写出文本输出 对于文本输出,可以使用PrintWriter.这个类拥有以文本格式打印字符串和数字的方法,它还有一个将PrintWriter链接到FileWriter的便捷方法,下面的语句: 等同于: 为了输出到打印写出器,需要使用与使用System.out时相同的print.println和printf方法.你可以用这些方法来打印数字(int.short.long.f?loat.double).字符.boolean值.字符串和对象. 例如,考虑下面的代码: 它将把下面的字符: 输