Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第五章:输入输出(IO)

第五章:输入输出(IO)

5.1 IO流概述

1. 什么是IO流

IO(Input/Output)流是Java中用于处理输入和输出操作的核心机制。它提供了一种统一的方式来读取和写入数据,无论是从文件、网络连接、内存缓冲区还是其他数据源。IO流可以看作是数据的流动管道,数据从源头(如文件)流向目标(如程序内存),或反之。

2. IO流的分类

Java中的IO流主要分为以下几类:

2.1 按数据流向

  • 输入流(InputStream/Reader):用于从数据源读取数据到程序中。
  • 输出流(OutputStream/Writer):用于将程序中的数据写入到目标位置。

2.2 按数据类型

  • 字节流(Byte Streams):以字节为单位读写数据,适用于二进制文件(如图片、音频等)。
    • 输入流:InputStream及其子类(如FileInputStream)。
    • 输出流:OutputStream及其子类(如FileOutputStream)。
  • 字符流(Character Streams):以字符为单位读写数据,适用于文本文件。
    • 输入流:Reader及其子类(如FileReader)。
    • 输出流:Writer及其子类(如FileWriter)。

2.3 按功能

  • 节点流(Node Streams):直接与数据源或目标交互的流(如FileInputStream)。
  • 处理流(Processing Streams):对节点流进行封装,提供额外功能(如缓冲、数据转换等),例如:
    • BufferedInputStream:提供缓冲功能,提高读取效率。
    • DataInputStream:支持基本数据类型的读取。

3. IO流的层次结构

Java的IO流类库采用了装饰器模式(Decorator Pattern),通过组合不同的流类来实现灵活的功能扩展。例如:

// 使用缓冲流包装文件输入流,提高读取效率
InputStream in = new BufferedInputStream(new FileInputStream("example.txt"));

4. 常见的IO流类

以下是Java IO包中一些重要的类:

类名描述
FileInputStream从文件读取字节的输入流
FileOutputStream向文件写入字节的输出流
FileReader从文件读取字符的输入流
FileWriter向文件写入字符的输出流
BufferedReader提供缓冲功能的字符输入流
BufferedWriter提供缓冲功能的字符输出流
ObjectInputStream用于反序列化对象的输入流
ObjectOutputStream用于序列化对象的输出流

5. IO流的基本使用步骤

以下是使用IO流的典型流程:

  1. 创建流对象:根据需求选择输入流或输出流,并绑定数据源或目标。
  2. 读写数据:调用流的读写方法(如read()、write())。
  3. 关闭流:调用close()方法释放资源(推荐使用try-with-resources语法自动关闭)。

示例代码:

// 使用try-with-resources自动关闭流
try (FileInputStream fis = new FileInputStream("input.txt");
     FileOutputStream fos = new FileOutputStream("output.txt")) {
    int data;
    while ((data = fis.read()) != -1) {
        fos.write(data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

6. 注意事项

  • 资源释放:必须关闭流以避免资源泄漏。
  • 异常处理:IO操作可能抛出IOException,需妥善处理。
  • 性能优化:对于频繁读写操作,建议使用缓冲流(如BufferedInputStream)。

通过本节的学习,读者可以掌握Java IO流的基本概念和分类,为后续深入学习字节流、字符流和文件操作打下基础。

Last Updated:: 3/27/25, 12:48 PM