第 10 章 文件输入和输出 文件输入和输出
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
将数据存储在文件中并在稍后进行检索的能力对于桌面应用程序和企业应用程序至关重要。在本章中,我们将介绍java.io 和java.nio 包中一些最常用的类。这些包为基本输入和输出(I/O)提供了丰富的工具集,同时也提供了 Java 中所有文件和网络通信所依赖的框架。图 10-1显示了java.io 包的范围。
我们将首先查看java.io 中的流类,它们是基本InputStream 、OutputStream 、Reader 和Writer 类的子类。然后,我们将查看File 类,并讨论如何使用java.io 中的类读写文件。我们还将快速了解数据压缩和序列化。在此过程中,我们将介绍java.nio 包。新 "I/O 包(或 NIO)增加了为构建高性能服务量身定制的重要功能。NIO 的核心功能是处理缓冲区(存放数据,以便更有效地利用其他资源)和通道(有效地存放数据,并由其他人同样有效地接收)。在某些情况下,NIO 还提供了更好的 API,可用于替代java.io 的某些功能。1
图 10-1. java.io 类的层次结构
溪流
Java 中的大多数 I/O 都基于流。从概念上讲,流代表了数据流,一端是写入器,另一端是读取器。当您使用java.io 包执行终端输入和输出、读写文件或通过 Java 中的网络套接字进行通信时(第 13 章将详细介绍网络),您正在使用各种类型的流。当我们查看 NIO 包时,会发现一个类似的概念,叫做通道。两者的主要区别在于,流以字节或字符为中心,而通道以包含这些数据类型的 "缓冲区 "为中心。缓冲区通常是数据的快速临时存储区,可以更容易地优化吞吐量。两者的功能大致相同。让我们从流开始。下面是最常用的流类的快速概述:
InputStream,OutputStream-
抽象 类,定义了读取或写入非结构化字节序列的基本功能。Java 中的所有其他字节流都建立在基本的
InputStream和OutputStream之上。 Reader,Writer-
抽象类,定义了读写字符数据序列的基本功能,支持 Unicode。Java 中的所有其他字符流都建立在
Reader和Writer的基础之上。 InputStreamReader,OutputStreamWriter-
根据特定字符编码方案(如 ASCII 或 Unicode)转换字节流和字符流的桥接类。(记住:在 Unicode 中,一个字符不一定是一个字节!)。
DataInputStream,DataOutputStream-
专门的流过滤器,增加了以标准化格式读写多字节数据类型(如数字基元和
String对象)的能力。 ObjectInputStream,ObjectOutputStream-
专门的流过滤器,能够写入整组序列化 Java 对象并对其进行重构。
BufferedInputStream,BufferedOutputStream,BufferedReader、BufferedWriter-
专门的 流过滤器,增加了缓冲功能以提高效率。在现实世界的 I/O 中,几乎总是使用缓冲区。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access