Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • 计算机基础
  • 操作系统原理
  • Linux
  • MacOS
  • Windows
  • 系统工程与研究专题
  • AI 基础
  • 大模型基础
  • Prompt 工程
  • RAG 检索增强生成
  • Agent 智能体
  • AI 应用开发
  • AI 工程化
  • AI 安全与治理
  • AI 面试与设计题
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • Java章节编写规范
  • Java基础

  • Java集合

  • Java并发

  • Java IO

    • Java IO概述
      • 1. Java IO 解决什么问题
      • 2. Java IO 的核心分类
        • 2.1 按数据方向划分
        • 2.2 按数据单位划分
      • 3. 学习 Java IO 的主线
      • 4. 本章节目录
        • 4.1 IO 基础
        • 4.2 常用 IO 流
        • 4.3 文件与目录操作
        • 4.4 Java NIO
        • 4.5 高级主题
        • 4.6 实践与性能优化
        • 4.7 面试与设计题
        • 4.8 实践速查
      • 5. Java IO 知识面速查
      • 6. Tips 快问快答
      • 7. 总结
    • IO基础

    • 常用IO流

    • 文件与目录操作

    • Java NIO

    • 高级主题

    • 实践与性能优化

    • 面试与设计题

    • IO实践速查

  • JVM

目录

Java IO概述

Java IO 是 Java 语言中处理输入和输出的基础能力。只要程序需要和外部世界交换数据,就离不开 IO:读取配置文件、写入日志、上传下载文件、网络通信、对象持久化、进程间通信、消息中间件刷盘、数据库读写,本质上都可以看到 IO 的影子。

从学习路径上看,Java IO 可以分为三个层次:

  1. 基础阶段:理解输入、输出、字节、字符、流、缓冲、文件这些概念,能够正确读写文本和二进制文件。
  2. 进阶阶段:理解装饰器模式、序列化、字符集、资源关闭、异常处理,能够写出稳定可靠的 IO 代码。
  3. 高级阶段:理解 NIO、Buffer、Channel、Selector、零拷贝、内存映射、BIO/NIO/AIO 模型,能够分析高性能网络和文件系统场景。

# 1. Java IO 解决什么问题

Java 程序运行在 JVM 中,而数据往往存在于 JVM 外部:

  • 文件在磁盘上。
  • 请求在网络连接中。
  • 图片、音频、视频是二进制数据。
  • 文本数据需要按照某种字符集编码和解码。
  • 对象需要转换成字节后才能保存或传输。

Java IO 的核心任务就是在程序和外部资源之间建立数据通道。

外部数据源 -> 输入流 -> Java 程序 -> 输出流 -> 外部目标

例如:

  • 从文件读取内容:文件是数据源,程序使用输入流读取。
  • 向文件写入日志:程序产生数据,使用输出流写入文件。
  • 从 Socket 接收请求:网络连接是数据源,程序读取字节。
  • 向浏览器返回响应:程序把数据写入网络输出流。

# 2. Java IO 的核心分类

Java IO 体系可以先从两个维度理解。

# 2.1 按数据方向划分

  • 输入流:从外部读取数据到程序中,如 InputStream、Reader。
  • 输出流:从程序写出数据到外部,如 OutputStream、Writer。

# 2.2 按数据单位划分

  • 字节流:以字节为单位处理数据,适合图片、视频、压缩包、网络协议等二进制场景。
  • 字符流:以字符为单位处理数据,适合文本场景,本质上会涉及字符集编码和解码。

因此 Java IO 最核心的四个抽象类是:

抽象类 方向 单位 典型场景
InputStream 输入 字节 读取图片、压缩包、网络字节
OutputStream 输出 字节 写入二进制文件、网络响应
Reader 输入 字符 读取文本、配置文件
Writer 输出 字符 写入文本、日志、模板内容

# 3. 学习 Java IO 的主线

建议按照下面的顺序学习:

  1. IO 流体系:先建立整体地图,知道每类流解决什么问题。
  2. 字节流和字符流:掌握最基本的文件读写。
  3. 缓冲流和转换流:理解性能优化和字符集转换。
  4. 文件 API:掌握 File、Path、Files 的区别。
  5. 序列化和对象流:理解对象如何变成字节,以及为什么生产环境要谨慎使用。
  6. NIO:掌握 Buffer、Channel、Selector,理解高性能 IO 的基础。
  7. 高级机制:理解内存映射、零拷贝、BIO/NIO/AIO。
  8. 实践优化:掌握大文件处理、资源关闭、异常处理、乱码排查、性能分析。

# 4. 本章节目录

# 4.1 IO 基础

  • IO流体系
  • 字节流
  • 字符流
  • 字节流与字符流的转换
  • 装饰器模式与IO设计

# 4.2 常用 IO 流

  • 文件流
  • 缓冲流
  • 数据流
  • 对象流与序列化
  • 打印流
  • 管道流

# 4.3 文件与目录操作

  • File类
  • Files与Paths
  • 文件遍历与监听
  • 临时文件与目录

# 4.4 Java NIO

  • NIO概述
  • Buffer缓冲区
  • Channel通道
  • Selector多路复用
  • SocketChannel网络编程
  • NIO与IO对比

# 4.5 高级主题

  • RandomAccessFile
  • 内存映射文件MappedByteBuffer
  • 零拷贝
  • BIO-NIO-AIO模型
  • 字符集与乱码
  • 序列化安全与替代方案

# 4.6 实践与性能优化

  • try-with-resources资源管理
  • 大文件读写
  • 文本文件处理
  • IO性能优化
  • IO常见坑

# 4.7 面试与设计题

  • Java IO核心面试题
  • Java NIO核心面试题
  • IO场景设计题

# 4.8 实践速查

  • Java IO知识面总复盘

# 5. Java IO 知识面速查

知识面 要掌握什么 典型风险
流体系 输入/输出、字节/字符、节点流/处理流 只背类名,不会按场景选型
文件 API File、Path、Files 忽略权限、符号链接、异常信息
字符集 编码、解码、乱码定位 依赖默认编码
缓冲 减少底层 IO 调用 忘记刷新或缓冲过大
序列化 对象与字节转换 反序列化安全和兼容性
NIO Buffer、Channel、Selector 忘记 flip、半包、空轮询
高级性能 MappedByteBuffer、零拷贝 过早优化,忽略真实瓶颈
工程实践 资源关闭、大文件、可靠写入 泄漏句柄、OOM、半写入

# 6. Tips 快问快答

Q:Java IO 学习主线是什么? A:先掌握流体系和文件读写,再学习资源管理、字符集、序列化,最后理解 NIO、零拷贝和性能排查。

Q:什么时候用字节流? A:处理图片、视频、压缩包、网络协议等二进制数据时用字节流。

Q:什么时候用字符流? A:处理文本时用字符流,并显式指定字符集。

Q:新代码优先用 File 还是 Files? A:优先用 Path 和 Files,它们异常表达和文件系统能力更完整。

Q:Java IO 最常见线上坑是什么? A:资源未关闭、默认编码导致乱码、大文件一次性入内存、写文件失败留下半文件。

Q:NIO 的核心模型是什么? A:Buffer 管数据,Channel 管通道,Selector 管多路事件。

Q:为什么 IO 章节要学操作系统知识? A:文件描述符、页缓存、系统调用、零拷贝和网络多路复用都依赖操作系统机制。

Q:IO 性能优化第一步是什么? A:先确认瓶颈在磁盘、网络、CPU、内存、锁还是下游服务,再选择优化方案。

# 7. 总结

Java IO 不是一组孤立 API,而是一套围绕“数据如何进出程序”建立起来的体系。新手阶段要会用,中级阶段要理解流体系和资源管理,高级阶段要能从操作系统、JVM、网络模型、性能瓶颈角度分析问题。

真正掌握 Java IO 的标志不是能背出多少类名,而是遇到一个真实场景时,能判断应该使用字节流还是字符流、是否需要缓冲、是否存在字符集问题、文件多大、是否需要随机访问、能否用 NIO 或零拷贝优化,以及失败时如何保证资源正确释放。

上次更新: 2026/06/25, 14:19:18
并发编程最佳实践
IO流体系

← 并发编程最佳实践 IO流体系→

Copyright © 2023-2026 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式