Java IO 流全体系总结:从基础到实战的完整突破(重写)

一、基础核心:字节流与字符流的底层逻辑

(一)字节流:二进制数据的读写

  1. 基础操作

    • 字节输入流:掌握 FileInputStream 单字节读取细节(返回值 -1 表示结束,07)、循环读取优化(批量读取代单字节,08)。
    • 文件拷贝:实现基础文件拷贝(09),分析单字节拷贝的性能弊端(IO 次数多,10),通过字节数组批量读写优化(11)。
  2. 缓冲流增强

    • 字节缓冲流:使用 BufferedInputStream/BufferedOutputStream 实现单字节拷贝(25)、多字节块读写(如 1024 字节,26),理解缓冲原理(减少系统调用,提升效率,27)。

(二)字符流:文本数据的编码处理

  1. 字符集与乱码

    • 字符集解析:对比 ASCII(单字节)、GBK(双字节中文,13)、Unicode(UTF-8/UTF-16,14)的存储规则。
    • 乱码根源:编码与解码字符集不一致、多字节字符截断(15),通过 String.getBytes() 和 new String(byte[]) 实现编码 / 解码(16)。
  2. 字符流操作

    • 字符输入流FileReader 空参 read()(单字符读取,17)、有参 read(char[])(批量读取,18),剖析底层解码原理(字节→字符,20)。
    • 字符输出流FileWriter 写出数据(19),解析底层编码原理(字符→字节,21)。
    • 字符缓冲流BufferedReader/BufferedWriter 简化文本读写(如 readLine() 按行读取,28)。

二、处理流:功能增强与扩展

(一)转换流:编码灵活控制

  • 核心类InputStreamReader(字节→字符,指定编码)、OutputStreamWriter(字符→字节,指定编码),解决不同编码文件的读写乱码问题(32-33)。

(二)序列化流:对象的持久化

  1. 基础使用:通过 ObjectInputStream/ObjectOutputStream 实现单个对象的序列化与反序列化(34-35)。
  2. 细节与扩展
    • 理解 Serializable 接口、transient 关键字的作用(36)。
    • 实现多对象读写(如集合存储对象后序列化,37)。

(三)打印流:格式化输出

  • 字节打印流PrintStream(如 System.out 底层实现,38)。
  • 字符打印流PrintWriter(支持自动刷新、编码设置,39)。

(四)压缩流:数据归档

  1. 单文件压缩:使用 ZipOutputStream 压缩单个文件(41)。
  2. 文件夹压缩:递归遍历目录,批量压缩子文件 / 子目录(42)。
  3. 解压缩:通过 ZipInputStream 解析压缩包(40)。

三、工具包:简化 IO 开发

(一)Commons-io

  • 核心功能
    • 文件操作:FileUtils.copyFile() 简化拷贝,FileUtils.listFiles() 遍历目录。
    • 流工具:IOUtils.copy() 一行代码完成流读写(43)。

(二)Hutool

  • IO 模块
    • FileUtil:便捷操作文件(读写、路径处理)。
    • StreamUtil:流工具类(44)。

四、综合实战:场景化应用突破

(一)文件处理进阶

  1. 复杂拷贝
    • 递归拷贝文件夹:遍历子目录 + 子文件,实现完整目录拷贝(22)。
    • 四种拷贝方式对比:单字节、字节数组、缓冲流、NIO,分析性能差异(29)。
  2. 文件篡改
    • 加密 / 解密:通过字节异或实现文件加密(23),反向异或解密。
    • 修改文件内容:使用 RandomAccessFile 随机修改文件数据(24)。
  3. 文本修复:恢复乱序文本(如《出师表》,30,字符流按行排序)。

(二)数据处理与模拟

  1. 网络爬虫
    • 爬取姓氏(45)、名字(46),清洗无效数据(47),结果写出到文件(48)。
  2. 假数据生成:通过 Hutool 工具生成姓名、手机号等测试数据(49)。
  3. 随机算法
    • 随机点名:集合随机取元素(50)。
    • 带权重随机:实现概率算法(如抽奖,51)。

(三)应用开发实战

  1. 登录注册系统:通过文件存储用户账号密码(52,字符流读写)。
  2. 拼图游戏全流程
    • 项目搭建(53)、登录界面(54)、注册界面(55)。
    • 数据持久化:序列化实现存档(56)、反序列化读档(56)、数据同步(56)。
    • 配置管理Properties 管理游戏参数(如背景色、难度,57-58)。
  3. 阶段大作业每日一记系统(59),通过文件按日期归档日记(字符流操作)。

五、总结与进阶方向

今日突破

  • 知识闭环:从字节 / 字符流基础,到缓冲、转换、序列化等处理流,再到工具包和综合实战,覆盖 IO 流全场景。
  • 核心能力:掌握编码控制、性能优化(缓冲)、对象持久化、压缩归档等关键技术,通过实战深化理解。

进阶拓展

  1. NIO 与异步 IO:学习 java.nio(通道、缓冲区、选择器),实现非阻塞 IO。
  2. Reactive Stream:结合响应式编程(如 RxJava),处理异步流数据。
  3. 分布式文件系统:了解 NFS、HDFS,结合 IO 流实现分布式文件操作。

通过系统学习,不仅能解决日常 IO 开发问题,更能深入理解编码原理、流的性能优化、数据持久化等底层逻辑,为复杂应用开发奠定基础 ✨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89228.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89228.shtml
英文地址,请注明出处:http://en.pswp.cn/web/89228.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书籍自然数数组的排序(8)0715

题目给定一个长度为N的整型数组arr,其中有N个互不相等的自然数1~N,请实现arr的排序,但是不要把下标0~N-1位置上的数通过直接赋值的方式替换成1~N。解答 arr在调整之后应该事下标从0到N-1的位置上依次放着1~N,即arr[index] index …

【08】MFC入门到精通——MFC模态对话框 和 非模态对话框 解析 及 实例演示

文章目录八、模态对话框 和 非模态对话框 创建及显示8.1 对话框是怎样弹出的8.2 模态对话框的创建及显示8.3 非模态对话框的创建及显示8.4 完整代码下载八、模态对话框 和 非模态对话框 创建及显示 Windows对话框分为两类:模态对话框 和 非模态对话框。 模态对话框…

github上传大文件(多种解决方案)

之前一直用vscode的上传项目方法,这个方便之处在于不用打开git终端输入各种命令,不过麻烦的是我一直无法拉取github上的远程仓库提交,每次只能更新已有的仓库并且上传的文件还不能太大,应该是不能超过100MB,而且直接在…

生活污水深度除磷的方法

生活污水中磷含量过多的危害大家都知道总磷是水质检测的重要指标之一,在污水处理中生活污水往往都会出现总磷超标的现象。生活污水磷超标的危害是多方面的主要包括水体富营养化、危害水生生物、影响人类健康,以及可能引发蓝藻水华等问题。除磷方法污水的…

Flutter瀑布流布局深度实践:打造高性能动态图片墙

本文将深入探讨如何在Flutter中实现高性能瀑布流布局,解决动态高度内容展示的核心难题,并带来卓越的用户体验。引言:瀑布流布局的魅力 瀑布流布局(Pinterest-style layout)已成为现代应用展示图片和内容的黄金标准。它通过错落有致的排列方式…

OpenCV 伽马校正函数gammaCorrection()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于对输入图像应用伽马校正(Gamma Correction),这是一种非线性的图像处理技术,主要用于调整…

Linux-局域网构建+VLAN 划分 + 端口 MAC-IP 绑定 + 静态 DHCP

文章目录1. 适用于家庭、工作室或小型企业的局域网构建2. VLAN划分3. VLAN 划分 端口 MAC-IP 绑定 静态 DHCP跳转→网络管理基础复习 1. 适用于家庭、工作室或小型企业的局域网构建 ✅ 一、硬件连线(一次到位) 光纤入户 → 光猫/宽带调制解调器光猫…

渗透测试路线

渗透测试学习路线报告(从入门到高级) 引言:渗透测试概述与学习路线设计 渗透测试作为网络安全体系中的核心实践环节,通过模拟真实攻击者的技术手段与攻击路径,主动识别信息系统中的安全漏洞、评估防护机制有效性&#…

Node.js 中http 和 http/2 是两个不同模块对比

1. 核心模块对比 特性http 模块 (HTTP/1.1)http2 模块 (HTTP/2)协议版本HTTP/1.1(文本协议)HTTP/2(二进制协议)多路复用不支持(需多个 TCP 连接)支持(单连接多流)头部压缩无HPACK 压…

3DGS之COLMAP

COLMAP 在 3DGS 中起到了数据预处理和三维重建的关键作用,其处理流程包括特征提取与匹配、稀疏重建、稠密重建和输出文件生成。结合 3DGS 的高斯分布建模和优化算法,COLMAP 提供了场景的几何和相机信息,为实时渲染和三维重建奠定了基础。一、…

RabbitMQ中队列长度限制(Queue Length Limit)详解

在 RabbitMQ 中,队列长度限制(Queue Length Limit)是指对队列中消息数量的最大限制。当队列中的消息数量达到设定的上限时,RabbitMQ 会根据配置的策略(如丢弃旧消息、拒绝新消息或将消息转移到另一个队列)来…

Python设计模式深度解析:建造者模式(Builder Pattern)完全指南

Python设计模式深度解析:建造者模式(Builder Pattern)完全指南前言什么是建造者模式?建造者模式的核心思想模式的核心组成实际案例一:UI选择组件的动态构建抽象建造者基类具体建造者实现列表框建造者复选框建造者工厂建…

elementuiPlus+vue3手脚架后台管理系统,上生产环境之后,如何隐藏vite.config.ts的target地址

在项目根目录创建 .env.production 文件: VITE_API_TARGEThttps://your-real-api.com修改 vite.config.ts: import { defineConfig, loadEnv } from viteexport default defineConfig(({ mode }) > {const env loadEnv(mode, process.cwd(), )return…

ARCGIS PRO DSK 颜色选择控件(ColorPickerControl)的调用

颜色选择控件ColorPickerControl 。一、XAML 集成方式 1 、在WPF窗体上使用,xml:加入空间命名引用xmlns:ui1"clr-namespace:ArcGIS.Desktop.Internal.Mapping.Symbology;assemblyArcGIS.Desktop.Mapping" xmlns:uil"http://schemas.xceed…

深浅拷贝以及函数缓存

目录 数据类型介绍 基本数据类型(Primitive Types) 引用数据类型(Reference Types) 浅拷贝 深拷贝 利用JSON的序列化和反序列化实现深拷贝 递归实现深拷贝 第三方库lodash的cloneDeep 函数缓存的概念 实现方法 数据类型介…

第六届信号处理与计算机科学国际学术会议(SPCS 2025)

重要信息 官网:www.icspcs.org (详情见官网) 时间:2025年8月15-17日 地点:西安 主题 信号处理与智能计算计算科学与人工智能网络与多媒体技术数字信号处理 雷达信号处理 通信信号处理 临时和传感器网络 模拟和…

MongoDB:一个灵活的、可扩展的 NoSQL 数据库

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

系统思考场景应用

最近一直在与不同行业头部企业共同探讨系统思考这个主题。一些新的合作伙伴也常常问我,系统思考究竟能为客户解决什么痛点? 这两天上课客户的核心需求是:全局思维。在过去的几年里,我深切体会到,随着外部环境的快速变化…

SQL预编译:安全高效数据库操作的关键

通过占位符(如 ? 或命名参数)编写预编译的 SQL 语句(通常通过 PreparedStatement 实现)是数据库操作的最佳实践,主要好处包括:🔒 1. 防止 SQL 注入攻击(核心安全优势) 问…

springboot实验室管理系统-计算机毕业设计源码20916

摘 要 随着高校实验室管理需求的不断增加,传统的管理方式已经难以满足现代教育的要求。为了解决这一问题,本文设计并实现了一种基于VUE和SpringBoot的实验室管理系统。该系统采用前后端分离的架构,前端使用VUE框架,后端基于Sprin…