Java IO 流全体系总结:从基础到实战的完整突破(重写)
一、基础核心:字节流与字符流的底层逻辑
(一)字节流:二进制数据的读写
基础操作
- 字节输入流:掌握
FileInputStream
单字节读取细节(返回值-1
表示结束,07)、循环读取优化(批量读取代单字节,08)。 - 文件拷贝:实现基础文件拷贝(09),分析单字节拷贝的性能弊端(IO 次数多,10),通过字节数组批量读写优化(11)。
- 字节输入流:掌握
缓冲流增强
- 字节缓冲流:使用
BufferedInputStream
/BufferedOutputStream
实现单字节拷贝(25)、多字节块读写(如 1024 字节,26),理解缓冲原理(减少系统调用,提升效率,27)。
- 字节缓冲流:使用
(二)字符流:文本数据的编码处理
字符集与乱码
- 字符集解析:对比 ASCII(单字节)、GBK(双字节中文,13)、Unicode(UTF-8/UTF-16,14)的存储规则。
- 乱码根源:编码与解码字符集不一致、多字节字符截断(15),通过
String.getBytes()
和new String(byte[])
实现编码 / 解码(16)。
字符流操作
- 字符输入流:
FileReader
空参read()
(单字符读取,17)、有参read(char[])
(批量读取,18),剖析底层解码原理(字节→字符,20)。 - 字符输出流:
FileWriter
写出数据(19),解析底层编码原理(字符→字节,21)。 - 字符缓冲流:
BufferedReader
/BufferedWriter
简化文本读写(如readLine()
按行读取,28)。
- 字符输入流:
二、处理流:功能增强与扩展
(一)转换流:编码灵活控制
- 核心类:
InputStreamReader
(字节→字符,指定编码)、OutputStreamWriter
(字符→字节,指定编码),解决不同编码文件的读写乱码问题(32-33)。
(二)序列化流:对象的持久化
- 基础使用:通过
ObjectInputStream
/ObjectOutputStream
实现单个对象的序列化与反序列化(34-35)。 - 细节与扩展:
- 理解
Serializable
接口、transient
关键字的作用(36)。 - 实现多对象读写(如集合存储对象后序列化,37)。
- 理解
(三)打印流:格式化输出
- 字节打印流:
PrintStream
(如System.out
底层实现,38)。 - 字符打印流:
PrintWriter
(支持自动刷新、编码设置,39)。
(四)压缩流:数据归档
- 单文件压缩:使用
ZipOutputStream
压缩单个文件(41)。 - 文件夹压缩:递归遍历目录,批量压缩子文件 / 子目录(42)。
- 解压缩:通过
ZipInputStream
解析压缩包(40)。
三、工具包:简化 IO 开发
(一)Commons-io
- 核心功能:
- 文件操作:
FileUtils.copyFile()
简化拷贝,FileUtils.listFiles()
遍历目录。 - 流工具:
IOUtils.copy()
一行代码完成流读写(43)。
- 文件操作:
(二)Hutool
- IO 模块:
FileUtil
:便捷操作文件(读写、路径处理)。StreamUtil
:流工具类(44)。
四、综合实战:场景化应用突破
(一)文件处理进阶
- 复杂拷贝:
- 递归拷贝文件夹:遍历子目录 + 子文件,实现完整目录拷贝(22)。
- 四种拷贝方式对比:单字节、字节数组、缓冲流、NIO,分析性能差异(29)。
- 文件篡改:
- 加密 / 解密:通过字节异或实现文件加密(23),反向异或解密。
- 修改文件内容:使用
RandomAccessFile
随机修改文件数据(24)。
- 文本修复:恢复乱序文本(如《出师表》,30,字符流按行排序)。
(二)数据处理与模拟
- 网络爬虫:
- 爬取姓氏(45)、名字(46),清洗无效数据(47),结果写出到文件(48)。
- 假数据生成:通过 Hutool 工具生成姓名、手机号等测试数据(49)。
- 随机算法:
- 随机点名:集合随机取元素(50)。
- 带权重随机:实现概率算法(如抽奖,51)。
(三)应用开发实战
- 登录注册系统:通过文件存储用户账号密码(52,字符流读写)。
- 拼图游戏全流程:
- 项目搭建(53)、登录界面(54)、注册界面(55)。
- 数据持久化:序列化实现存档(56)、反序列化读档(56)、数据同步(56)。
- 配置管理:
Properties
管理游戏参数(如背景色、难度,57-58)。
- 阶段大作业:每日一记系统(59),通过文件按日期归档日记(字符流操作)。
五、总结与进阶方向
今日突破
- 知识闭环:从字节 / 字符流基础,到缓冲、转换、序列化等处理流,再到工具包和综合实战,覆盖 IO 流全场景。
- 核心能力:掌握编码控制、性能优化(缓冲)、对象持久化、压缩归档等关键技术,通过实战深化理解。
进阶拓展
- NIO 与异步 IO:学习
java.nio
(通道、缓冲区、选择器),实现非阻塞 IO。 - Reactive Stream:结合响应式编程(如 RxJava),处理异步流数据。
- 分布式文件系统:了解 NFS、HDFS,结合 IO 流实现分布式文件操作。
通过系统学习,不仅能解决日常 IO 开发问题,更能深入理解编码原理、流的性能优化、数据持久化等底层逻辑,为复杂应用开发奠定基础 ✨。