Java学习——IO流

发布于:2025-07-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

Java IO流

一、什么是I/O流?核心概念解析

  1. I/O流(Input/Output Stream)
    是Java中用于在程序与外部设备(文件、网络、内存等)间传输数据的抽象机制。“流”(Stream)类比水流,代表数据的单向、有序、无结构字节序列
    • 输入流(InputStream/Reader):数据从外部流向程序(如读取文件)。
    • 输出流(OutputStream/Writer):数据从程序流向外部(如写入文件)。
    • 核心目的:屏蔽底层设备差异,提供统一操作接口。

二、流的分类与作用

1. 按数据类型分
类型 单位 适用场景 核心类 特点
字节流 字节 (8bit) 二进制文件(图片、视频) InputStream/OutputStream 直接操作原始字节,无编码转换。
字符流 字符 (Unicode) 文本文件(.txt, .csv) Reader/Writer 自动处理字符编码(如UTF-8),避免乱码。
2. 按功能角色分
类型 功能 典型实现类 作用
节点流 直接连接数据源/目标 FileInputStream, FileWriter 基础读写操作。
处理流(包装流) 增强节点流功能 BufferedInputStream, BufferedReader 添加缓冲、数据转换等高级功能。

三、I/O流的核心应用场景

  1. 文件操作
    • 读写文本/二进制文件(如日志记录、配置文件解析)。
    • 示例:FileReader读文本,FileOutputStream写图片。
  2. 网络通信
    • 通过Socket获取输入/输出流传输数据。
  3. 内存数据处理
    • ByteArrayInputStream/ByteArrayOutputStream处理内存字节数据。
  4. 对象序列化
    • ObjectOutputStream将对象转为字节流持久化存储。
  5. 线程间通信
    • PipedInputStream/PipedOutputStream实现管道传输。

四、流的使用方法:关键步骤与最佳实践

1. 基础操作流程
// 读文件示例(字符流)
try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) {
   
    String line;
    while ((line = reader.readLine()) != null) {
    // 逐行读取
        System.out.println(line);
    }
} catch (IOException e) {
   
    e.printStackTrace();
}

// 写文件示例(字节流)
try (FileOutputStream fos = new FileOutputStream("output.dat");
     BufferedOutputStream bos = new BufferedOutputStream(fos)) {
   
    byte[] data = {
   0x48, 0x65, 0x6C, 0x6C, 0x6F}; // "Hello"的字节
    bos.write(data); // 缓冲写入,提升性能
} catch (IOException e) {
   
    e.printStackTrace();
}

关键点

  • 资源释放:使用try-with-resources(Java 7+)自动关闭流,避免资源泄漏。
  • 缓冲机制:用BufferedXXX包装流减少磁盘I/O次数,提升性能(尤其大文件)。
2. 字节流 vs 字符流的选择
  • 优先字节流:处理图片、视频、压缩包等二进制文件。
  • 使用字符流:处理文本文件(自动编码转换,避免乱码)。
    // 字符编码指定(解决乱码)
    InputStreamReader isr = new InputStreamReader(
        new FileInputStream("data.txt"), "UTF-8"
    );
    
3. 高级功能应用
  • 对象序列化
    try (ObjectOutputStream oos = new ObjectOutputStream(
        new FileOutputStream("user.dat"))
    <

网站公告

今日签到

点亮在社区的每一天
去签到