java io流,io流是什么;应用场景;io流分类,以及使用分类场景;io流字节输入输出流,io字符输入输出流;不同输入输出流使用,使用场景;缓冲流

Java I/O 流全解

1. I/O 流是什么?

I/O 流(Input/Output Stream)是 Java 中用于 数据传输 的抽象模型,I 表示输入(读数据),O 表示输出(写数据),表示数据的连续传输。

本质:程序和数据源(文件、网络、内存、设备等)之间传输数据的通道。


2. I/O 流的应用场景

  • 文件读写(文本、二进制文件)

  • 网络传输(Socket)

  • 数据序列化(对象持久化)

  • 进程通信(管道流)

  • 内存缓存数据处理(数组流、字符串流)

  • 控制台输入输出System.in/out


3. I/O 流的分类

Java I/O 流按不同维度分类:

3.1 按方向

类型作用常用类
输入流(InputStream / Reader)从数据源读数据到程序FileInputStream, BufferedReader
输出流(OutputStream / Writer)从程序写数据到目标FileOutputStream, BufferedWriter


3.2 按处理单位

类型作用常用类场景
字节流(InputStream / OutputStream)按字节处理数据FileInputStream, FileOutputStream二进制文件(图片、音视频)
字符流(Reader / Writer)按字符处理数据(自动编码/解码)FileReader, FileWriter文本文件(TXT、CSV、JSON)


3.3 按功能

类型作用常用类场景
节点流(直接连接数据源)直接读写数据源FileInputStreamFileReader直接访问文件、内存
处理流(套在节点流外)增强功能BufferedReaderDataInputStream缓冲、数据类型读写


4. 核心 I/O 流体系结构

        字节流                   字符流
输入流  InputStream              Reader
输出流  OutputStream             Writer


5. 字节流(Byte Streams)

字节流的父类:

  • InputStream(字节输入)

  • OutputStream(字节输出)

示例:文件字节读取与写入

import java.io.*;

public class ByteStreamDemo {
    public static void main(String[] args) throws IOException {
        // 写入文件
        try (FileOutputStream fos = new FileOutputStream("test.bin")) {
            fos.write(new byte[]{65, 66, 67}); // 写入 ABC
        }

        // 读取文件
        try (FileInputStream fis = new FileInputStream("test.bin")) {
            int b;
            while ((b = fis.read()) != -1) {
                System.out.print((char) b);
            }
        }
    }
}

📌 应用场景:图片、音频、视频、压缩包等二进制文件。


6. 字符流(Character Streams)

字符流的父类:

  • Reader(字符输入)

  • Writer(字符输出)

示例:文本读取与写入

import java.io.*;

public class CharStreamDemo {
    public static void main(String[] args) throws IOException {
        // 写入文件
        try (FileWriter fw = new FileWriter("test.txt")) {
            fw.write("你好,Java IO");
        }

        // 读取文件
        try (FileReader fr = new FileReader("test.txt")) {
            int ch;
            while ((ch = fr.read()) != -1) {
                System.out.print((char) ch);
            }
        }
    }
}

📌 应用场景:TXT、CSV、JSON 等文本文件。


7. 不同输入输出流的使用场景

类型场景
FileInputStream / FileOutputStream字节流二进制文件读写
FileReader / FileWriter字符流文本文件读写
BufferedInputStream / BufferedOutputStream缓冲字节流频繁读写二进制文件,提高性能
BufferedReader / BufferedWriter缓冲字符流按行读取文本文件
DataInputStream / DataOutputStream数据流读写基本数据类型
ObjectInputStream / ObjectOutputStream对象流对象序列化与反序列化
ByteArrayInputStream / ByteArrayOutputStream内存字节流在内存中处理二进制数据
StringReader / StringWriter内存字符流在内存中处理字符串数据


8. 缓冲流(Buffered Streams)

缓冲流是处理流的一种,内部有缓冲区,减少了磁盘 I/O 次数,提高性能。

例:BufferedReader 按行读取文本

import java.io.*;

public class BufferedDemo {
    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }
    }
}

📌 适用场景

  • 文件较大且频繁读取

  • 按行读取文本

  • 批量写入文件


9. I/O 流选择建议

场景推荐类
文本文件(小/中等大小)BufferedReader / BufferedWriter
二进制文件BufferedInputStream / BufferedOutputStream
按基本类型读写DataInputStream / DataOutputStream
对象存储ObjectOutputStream / ObjectInputStream
大文件高性能Java NIO(FilesChannel

10. Java I/O 流分类结构图

                    ┌─────────────── 顶层抽象类 ───────────────┐
                    │                                         │
              InputStream (字节输入)                OutputStream (字节输出)
                    │                                         │
       ┌────────────┴─────────────┐                ┌───────────┴───────────────┐
       │                          │                │                           │
FileInputStream          ByteArrayInputStream   FileOutputStream         ByteArrayOutputStream
BufferedInputStream      ObjectInputStream      BufferedOutputStream     ObjectOutputStream
DataInputStream          PipedInputStream       DataOutputStream         PipedOutputStream
...

                    ┌─────────────── 顶层抽象类 ───────────────┐
                    │                                         │
                 Reader (字符输入)                   Writer (字符输出)
                    │                                         │
       ┌────────────┴─────────────┐                ┌───────────┴───────────────┐
       │                          │                │                           │
FileReader               CharArrayReader     FileWriter                CharArrayWriter
BufferedReader           StringReader        BufferedWriter            StringWriter
PipedReader              InputStreamReader   PipedWriter               OutputStreamWriter

分类记忆技巧

  1. 字节流(InputStream / OutputStream)

    • 处理二进制数据(图片、音视频等)

    • FileInputStream / FileOutputStream → 基础文件读写

    • BufferedInputStream / BufferedOutputStream → 缓冲提高效率

    • DataInputStream / DataOutputStream → 读写基本类型

    • ObjectInputStream / ObjectOutputStream → 对象序列化

  2. 字符流(Reader / Writer)

    • 处理文本文件(自动编码解码)

    • FileReader / FileWriter → 基础文本读写

    • BufferedReader / BufferedWriter → 按行读取/批量写入

    • InputStreamReader / OutputStreamWriter → 字节与字符转换(可指定编码)

  3. 缓冲流

    • 外层包装,提高性能(减少系统 I/O 调用次数)

    • 常见:BufferedReaderBufferedWriterBufferedInputStreamBufferedOutputStream

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值