IO 核心概念

 

Java IO(Input/Output)用于处理设备间数据传输,核心是流——数据按顺序传输的通道,分为输入流(读数据)、输出流(写数据)。

 

2. IO 分类

 

(1)按数据方向

 

• 输入流:从外部(文件、网络、键盘)读取数据到程序,顶层父类:InputStream(字节)、Reader(字符)

 

• 输出流:从程序写入数据到外部,顶层父类:OutputStream(字节)、Writer(字符)

 

(2)按数据单位

 

• 字节流:以字节(8位)为单位,处理所有类型数据(文件、图片、视频等),顶层类:InputStream、OutputStream

 

• 字符流:以字符(2字节,UTF-16)为单位,仅处理文本数据,顶层类:Reader、Writer(底层基于字节流,自动编码/解码)

 

(3)按功能

 

• 节点流:直接连接数据源,直接读写数据(如 FileInputStream、FileReader)

 

• 处理流:包装节点流增强功能(如缓冲、编码转换),不直接连接数据源(如 BufferedInputStream、InputStreamReader)

 

3. 核心字节流类

 

• FileInputStream:读取文件字节数据,关键方法:read()、read(byte[])、close()

 

• FileOutputStream:写入文件字节数据,关键方法:write(int)、write(byte[])、close()

 

• BufferedInputStream:字节缓冲输入流(提高效率),继承 InputStream 方法,新增 mark()/reset()

 

• BufferedOutputStream:字节缓冲输出流,继承 OutputStream 方法,flush()(强制刷新缓冲区)

 

4. 核心字符流类

 

• FileReader:读取文件字符数据,关键方法:read()、read(char[])、close()

 

• FileWriter:写入文件字符数据,关键方法:write(int)、write(char[])、write(String)、close()

 

• BufferedReader:字符缓冲输入流,关键方法:readLine()(按行读取)、close()

 

• BufferedWriter:字符缓冲输出流,关键方法:newLine()(换行)、flush()、close()

 

• InputStreamReader:字节流转字符流(编码转换),构造器可指定编码(如 UTF-8)

 

• OutputStreamWriter:字符流转字节流,构造器可指定编码(如 GBK)

 

5. 关键注意事项

 

• 资源关闭:流使用后必须关闭,推荐 try-with-resources(自动关闭实现 AutoCloseable 的资源)

 

• 缓冲流作用:减少磁盘 IO 次数,批量读写提高效率

 

• 编码问题:字符流默认系统编码,跨平台需显式指定编码

 

• 文件操作:FileOutputStream/FileWriter 构造器加 true 表示追加写入(默认覆盖)

 

6. NIO 简介

 

Java 1.4 引入 NIO(Non-blocking IO),基于通道和缓冲区,支持非阻塞 IO 和多路复用,效率更高,核心类:ByteBuffer、FileChannel、Selector(IO 为阻塞式,NIO 更适合高并发场景)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐