当前位置: 首页 > news >正文

Java 中 NIO与传统IO的关系 (附Java IO 流核心类对比表)

文章目录

    • 1. NIO 是一个全新的 IO 模型
    • 2. 对文件和路径的重写
    • 3. 字符处理方面的变化
    • 4. 其他重要特性
    • 5. NIO 与传统 IO 的关系
  • Java IO 流核心类对比表(含常用度与替代说明)


NIO 与传统 IO 的主要区别和关系:

1. NIO 是一个全新的 IO 模型

  • NIO 引入了通道(Channel)缓冲区(Buffer) 概念,这是与传统流(Stream)模型完全不同的 IO 方式
  • 传统 IO 是面向流的,数据只能顺序读写
  • NIO 是面向缓冲区的,可以随机访问数据

2. 对文件和路径的重写

  • 新增了 PathPathsFiles 等类,替代了传统的 File
  • 这些新类提供了更丰富、更高效的文件操作方法
  • 例如:Files.readAllLines()Files.copy() 等简化了很多常见操作

3. 字符处理方面的变化

  • NIO 提供了 CharsetCharsetDecoder/Encoder 类,让字符编码转换更灵活
  • 提供了 StandardCharsets 类统一管理标准字符集
  • 这些功能确实让字符处理更强大,但这只是 NIO 的一部分

4. 其他重要特性

  • 非阻塞 IO:NIO 的核心优势之一,特别适合网络编程
  • 选择器(Selector):可以用一个线程管理多个通道,大大提高并发处理能力
  • 内存映射文件:通过 MappedByteBuffer 直接将文件映射到内存
  • 管道(Pipe):线程间通信的新方式

5. NIO 与传统 IO 的关系

  • NIO 并不是完全取代传统 IO,而是提供了一种新的、更强大的选择
  • 很多传统 IO 类仍然广泛使用,尤其是字符流相关类
  • NIO.2 (JDK 7+) 引入的文件 API 确实让文件操作更简单

Java IO 流核心类对比表(含常用度与替代说明)

类别具体类名流类型核心作用常用度替代说明(含 NIO.2 关联)
字节节点流FileInputStream字节输入从文件读取字节数据(如读图片、音频)★★★★★无完全替代,NIO.2 的 Files.readAllBytes() 可简化文件读字节操作,但底层仍依赖类似逻辑
FileOutputStream字节输出向文件写入字节数据(如写图片、音频)★★★★★无完全替代,NIO.2 的 Files.write() 可简化文件写字节操作,日常场景中两者均常用
ByteArrayInputStream字节输入从内存字节数组(byte[])读取数据★★★★☆无替代,内存操作场景高频使用,NIO 未专门覆盖此类基础内存流功能
ByteArrayOutputStream字节输出向内存字节数组(byte[])写入数据(可动态扩容)★★★★☆无替代,内存数据拼接场景(如临时缓存)常用,NIO 无直接对应类
字节包装流BufferedInputStream字节输入给字节节点流加缓冲,提升读取效率(减少 IO 次数)★★★★★无替代,几乎所有字节输入场景都会搭配使用,NIO 缓冲机制不同但不直接替代此类
BufferedOutputStream字节输出给字节节点流加缓冲,提升写入效率(需注意 flush())★★★★★无替代,字节输出场景高频搭配,NIO 不直接替代
DataInputStream字节输入读取基本数据类型(int、double 等)的字节流(需与 DataOutputStream 配合)★★★☆☆无替代,二进制序列化基础类型场景常用,NIO 无直接对应类,需手动处理
DataOutputStream字节输出写入基本数据类型(int、double 等)的字节流★★★☆☆无替代,与 DataInputStream 配套使用,日常二进制数据传输场景偶用
PrintStream字节输出格式化输出字节流(如 System.out 本质是 PrintStream),支持自动 flush★★★★★无替代,控制台输出、日志简单写入场景高频,NIO 不直接替代,仍是日常 IO 核心类
字符节点流FileReader字符输入从文件读取字符数据(默认用系统编码,如 UTF-8)★★★★☆可被 NIO.2 的 Files.newBufferedReader() 替代(后者更灵活指定编码),但传统场景仍常用
FileWriter字符输出向文件写入字符数据(默认用系统编码)★★★★☆可被 NIO.2 的 Files.newBufferedWriter() 替代(支持指定编码),传统场景仍有使用
CharArrayReader字符输入从内存字符数组(char[])读取数据★★★☆☆无替代,内存字符数据读取场景偶用,NIO 无直接对应类
CharArrayWriter字符输出向内存字符数组(char[])写入数据(可动态扩容)★★★☆☆无替代,内存字符拼接场景(如字符串构建)偶用,NIO 无直接对应类
字符包装流BufferedReader字符输入给字符节点流加缓冲,支持 readLine() 读取整行★★★★★无替代,所有字符输入场景(如读文本文件、控制台)必用,NIO.2 的缓冲流本质是其优化版
BufferedWriter字符输出给字符节点流加缓冲,支持 newLine() 跨平台换行★★★★★无替代,字符输出场景必用,NIO.2 的缓冲流是其优化版,但核心逻辑一致
InputStreamReader字符输入字节流→字符流的转换(需指定编码,解决中文乱码)★★★★★无替代,字节流转字符流的核心类(如 System.in 转字符读),NIO 编码转换机制不同但不替代此类
OutputStreamWriter字符输出字符流→字节流的转换(需指定编码)★★★★★无替代,字符流转字节流的核心类,日常 IO 中字符→字节转换必用,NIO 不直接替代
PrintWriter字符输出格式化输出字符流(支持指定编码),需手动 flush()★★★★★无替代,文本格式化输出(如日志、文件)高频,功能比 PrintStream 更灵活,NIO 不直接替代
NIO.2 核心类Files工具类提供静态方法简化文件操作(读/写字节、字符,复制/删除文件等)★★★★★无替代,JDK 7+ 后日常文件操作首选,底层封装传统 IO,但简化了代码(如无需手动关流)
Paths工具类创建 Path 对象(表示文件/目录路径)★★★★★无替代,NIO.2 中路径操作的核心工具,与 Files 配合使用
Path路径类表示文件/目录的路径(替代传统 File 类的部分功能)★★★★★无替代,NIO.2 路径操作的核心类,比传统 File 类更高效、功能更全
BufferedWriter(NIO)字符输出Files.newBufferedWriter() 创建,本质是传统 BufferedWriter 优化版★★★★★替代传统 FileWriter+BufferedWriter 组合,支持指定编码,无需手动关流(try-with-resources)
BufferedReader(NIO)字符输入Files.newBufferedReader() 创建,本质是传统 BufferedReader 优化版★★★★★替代传统 FileReader+BufferedReader 组合,支持指定编码,简化代码
http://www.dtcms.com/a/407901.html

相关文章:

  • 阿里巴巴怎么做企业网站南京江北新区楼盘
  • I/O 多路转接之 epoll:高并发服务器的性能利器
  • 呼叫行业群呼模式转手拨模式转型代价分析
  • 手机网站建站价格淘宝网站推广策划方案
  • linux 安装和使用CommonAPI
  • Linux指令和Windows的有啥不一样?咋用的?
  • 操作系统(二) :操作系统运行机制(中断和异常、系统调用)
  • 高精度组合惯导技术与IMU传感器价格及供应商分析
  • 网站文字优化方案网络规划与设计报告总结
  • C++ 拓扑排序
  • Ubuntu 24.04.3搭建redis哨兵模式
  • Swift 入门(一 - 基础语法)
  • GCMSCNN 模块:气相色谱 - 质谱数据的分子特征提取方案
  • 简单网页制作模板图片福州seo兼职
  • 新德通:深耕光通信领域,打造全场景网络连接解决方案
  • 汽车网站模板免费下载做网站的注意点
  • COMSOL建立Voronoi泰森多边形二维模型
  • springboot - 邮箱验证码登录
  • 百度收录什么网站京东网站建设的策划书
  • 进程的概念(上)
  • 高仿id97网站模板涞水县建设局网站
  • 网站数据库结构被删了怎么办一键优化为什么不能100
  • 余姚建设网站的公司网站new图标
  • 重庆网站推广流程php5mysql网站开发实例精讲
  • 小型商城网站没技术怎么做网站
  • 网络公司网站模版视频网站做app开发的
  • 北京建站管理系统开发中企动力中山分公司网站
  • 手机端企业网站模板网页怎么设计与制作
  • 代码随想录算法训练营第21天 -- 回溯4 || 491.非递减子序列 / 46.全排列 /47.全排列 II
  • 绍兴公司网站建设 中企动力绍兴wordpress edc