Java中的IO分类

Java中IO的分类及常见类

Java中的IO(输入/输出)系统主要可以分为以下几类:

1. 按照数据流向分类

  • 输入流(Input Stream):用于从数据源读取数据

    • 如:InputStreamReader

  • 输出流(Output Stream):用于向目标写入数据

    • 如:OutputStreamWriter

2. 按照操作数据类型分类

  • 字节流(Byte Stream):以字节(8位)为单位操作数据

    • 抽象基类:InputStreamOutputStream

    • 适用于二进制文件(如图片、音频、视频等)

  • 字符流(Character Stream):以字符(16位Unicode)为单位操作数据

    • 抽象基类:ReaderWriter

    • 适用于文本文件,能正确处理字符编码

3. 按照功能角色分类

  • 节点流(Node Stream):直接与数据源/目的地连接的流

    • 如:FileInputStreamFileReader

  • 处理流/包装流(Processing Stream):对已存在的流进行包装,提供增强功能

    • 如:BufferedInputStreamBufferedReaderDataInputStream

4. 按照IO模型分类(Java 1.4+)

  • BIO(Blocking IO):传统的同步阻塞IO

  • NIO(Non-blocking IO/New IO):非阻塞IO,基于通道(Channel)和缓冲区(Buffer)

    • 核心类:ChannelBufferSelector

  • AIO(Asynchronous IO):异步非阻塞IO(Java 7引入)

    • 基于回调机制

5. 常见IO类

字节流

  • FileInputStream/FileOutputStream - 文件字节流

  • ByteArrayInputStream/ByteArrayOutputStream - 字节数组流

  • BufferedInputStream/BufferedOutputStream - 缓冲字节流

  • DataInputStream/DataOutputStream - 基本数据类型流

  • ObjectInputStream/ObjectOutputStream - 对象序列化流

字符流

  • FileReader/FileWriter - 文件字符流

  • CharArrayReader/CharArrayWriter - 字符数组流

  • BufferedReader/BufferedWriter - 缓冲字符流

  • InputStreamReader/OutputStreamWriter - 字节字符转换流

  • PrintWriter - 打印流

Java的IO系统设计采用了装饰器模式,可以通过组合不同的流类来实现复杂的功能。

### ### JavaIO 流的分类 Java 中的 IO 流按照不同的分类方式可以分为多种类型,主要包括以下几种: #### 1. 按照数据流动方向分类 - **输入流(InputStream/Reader)**:用于从数据源读取数据,例如从文件、网络连接等读取字节或字符数据。 - **输出流(OutputStream/Writer)**:用于向目标写入数据,例如向文件、网络连接等写入字节或字符数据[^2]。 #### 2. 按照处理数据单位分类 - **字节流(InputStream/OutputStream)**:以字节为单位进行数据的读写操作,适用于处理二进制数据,如图片、音频、视频等。 - **字符流(Reader/Writer)**:以字符为单位进行数据的读写操作,适用于处理文本数据,如 `.txt` 文件[^2]。 #### 3. 按照流的功能分类 - **节点流(Node Stream)**:直接与数据源连接,如 `FileInputStream`、`FileReader` 等。 - **处理流(Processing Stream)**:对节点流进行包装,提供更高效或更便捷的功能,如 `BufferedInputStream`、`BufferedReader` 等。这类流通常会提供缓冲机制,提高 IO 操作的性能[^3]。 #### 4. 按照流的层次结构分类 - **字节输入流**:`InputStream` 是所有字节输入流的父类,其常用子类包括 `FileInputStream`、`BufferedInputStream`、`ObjectInputStream` 等。 - **字节输出流**:`OutputStream` 是所有字节输出流的父类,其常用子类包括 `FileOutputStream`、`BufferedOutputStream`、`ObjectOutputStream` 等。 - **字符输入流**:`Reader` 是所有字符输入流的父类,其常用子类包括 `FileReader`、`BufferedReader`、`InputStreamReader` 等。 - **字符输出流**:`Writer` 是所有字符输出流的父类,其常用子类包括 `FileWriter`、`BufferedWriter`、`OutputStreamWriter` 等[^3]。 #### 5. 常见 IO 流示例代码 ##### 字节流复制文件示例 ```java try (FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("destination.txt")) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); } ``` ##### 字符流读写文件示例 ```java try (BufferedReader reader = new BufferedReader(new FileReader("input.txt")); BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) { String line; while ((line = reader.readLine()) != null) { writer.write(line); writer.newLine(); } } catch (IOException e) { e.printStackTrace(); } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值