Java IO概述
Java IO(输入/输出)是 Java 平台中用于数据流处理的重要部分,提供了对文件、网络、内存等多种数据源和目标的操作。Java IO 包含了多种类和接口,能够实现同步和异步的输入输出操作。Java IO API 主要分为两大部分:面向字节流的 IO 和面向字符流的 IO。
# 1. 输入输出流
- 字节流(InputStream 和 OutputStream):用于处理 8 位字节的数据,适合于处理诸如图像、音频、视频等二进制文件。
- InputStream:读取数据的基类,包括
FileInputStream
、BufferedInputStream
、DataInputStream
等常见子类。 - OutputStream:写入数据的基类,包括
FileOutputStream
、BufferedOutputStream
、DataOutputStream
等常见子类。
- InputStream:读取数据的基类,包括
- 字符流(Reader 和 Writer):用于处理 16 位字符的数据,适合于处理文本文件。
- Reader:读取字符数据的基类,包括
FileReader
、BufferedReader
、InputStreamReader
等常见子类。 - Writer:写入字符数据的基类,包括
FileWriter
、BufferedWriter
、OutputStreamWriter
等常见子类。
- Reader:读取字符数据的基类,包括
# 2. 文件操作
- File 类:
java.io.File
类是 Java IO 中用于表示文件和目录路径的类,提供了对文件和目录的基本操作,如创建、删除、重命名、获取文件信息等。 - RandomAccessFile:用于实现对文件的随机访问,可以从文件的任意位置进行读取和写入,适合于实现文件的分块读写。
# 3. 缓冲流
- BufferedInputStream 和 BufferedOutputStream:字节流的缓冲处理类,通过减少对底层资源的访问次数,提高 IO 操作的效率。
- BufferedReader 和 BufferedWriter:字符流的缓冲处理类,用于提高对字符数据的读取和写入效率,常用于逐行读取文本数据。
# 4. 数据流
- DataInputStream 和 DataOutputStream:用于读取和写入 Java 的原始数据类型(如
int
、float
、double
等),通过提供对基本数据类型的读写支持,方便了对数据的处理。
# 5. 对象流
- ObjectInputStream 和 ObjectOutputStream:用于对象的序列化和反序列化操作,可以将对象转换为字节流,以便存储到文件或通过网络传输。
- Serializable 接口:对象序列化的前提是类必须实现
Serializable
接口,以便标记该类的对象是可序列化的。
- Serializable 接口:对象序列化的前提是类必须实现
# 6. 打印流
- PrintStream 和 PrintWriter:提供了格式化输出的功能,可以方便地将各种数据类型输出到文件、控制台等。
- PrintStream:主要用于字节流的打印输出,常见的
System.out
就是一个PrintStream
实例。 - PrintWriter:用于字符流的打印输出,支持自动刷新,常用于文本文件的输出。
- PrintStream:主要用于字节流的打印输出,常见的
# 7. 管道流
- PipedInputStream 和 PipedOutputStream:用于实现线程之间的通信,
PipedInputStream
和PipedOutputStream
可以连接起来,实现数据在不同线程之间的传输。 - PipedReader 和 PipedWriter:字符流版本的管道,用于线程间的字符数据传输。
# 8. NIO(New IO)
- 概述:Java NIO(New Input/Output)是在 Java 1.4 引入的,与传统 IO 不同,它是基于缓冲区和通道的非阻塞 IO,能够实现更高效的数据处理。
- Channel(通道):
Channel
是 NIO 中的数据传输通道,用于连接数据源和数据目标。常见的通道类型包括FileChannel
、SocketChannel
、ServerSocketChannel
等。 - Buffer(缓冲区):
Buffer
是用于存储数据的容器,与传统 IO 中的流不同,NIO 中的数据读取和写入都是通过缓冲区进行的。 - Selector(选择器):
Selector
允许一个线程管理多个通道,尤其适合于管理大量的网络连接场景,通过选择器可以实现非阻塞的多路复用。
# 9. 文件系统和实用工具类
- Files 和 Paths 类:
java.nio.file.Files
和java.nio.file.Paths
类提供了对文件和目录的便捷操作方法,如复制、移动、删除、创建等。 - FileVisitor 接口:用于遍历文件树,可以实现对文件系统的递归访问,常与
Files.walkFileTree()
方法结合使用。
# 10. IO 的常见应用场景
- 文件读写:使用
FileInputStream
、FileOutputStream
、FileReader
、FileWriter
等类实现文件的读写操作。 - 网络数据传输:使用
Socket
和ServerSocket
结合 IO 流实现网络中的数据读写。 - 日志系统:使用
PrintWriter
或BufferedWriter
编写日志到文件。 - 对象持久化:使用
ObjectOutputStream
和ObjectInputStream
对 Java 对象进行序列化和反序列化。
# 11. 总结
Java IO 提供了丰富的 API 来处理各种输入输出场景,从简单的文件读写到复杂的网络通信和对象序列化。通过结合使用字节流、字符流、缓冲流、对象流等工具,开发者可以高效地实现数据的传输和处理。理解 Java IO 的各个组成部分和应用场景,有助于在实际开发中编写更加高效、灵活的 IO 处理代码。
上次更新: 2024/11/01, 13:45:14