Java的I/O流是什么?

Java 的 I/O(输入/输出)流是处理数据读写的机制。它们提供了与外部世界(如文件、网络、控制台等)进行交互的能力。Java I/O 流体系结构广泛应用于文件操作、网络通信、数据序列化等任务。

Java I/O 流的基本概念

  1. 流(Stream)

    • 流是一个数据通道,可以是输入流或输出流。输入流用于读取数据,输出流用于写入数据。
  2. 字节流与字符流

    • 字节流(Byte Stream):处理原始二进制数据。适用于所有类型的数据,如图片、音频、视频等。字节流以 InputStreamOutputStream 为基类。
    • 字符流(Character Stream):处理文本数据,自动处理字符编码。适用于文本数据。字符流以 ReaderWriter 为基类。

字节流

  • InputStream(字节输入流):

    • FileInputStream:从文件读取字节数据。
    • BufferedInputStream:提供缓冲功能,提高读取效率。
    • ObjectInputStream:反序列化对象。
  • OutputStream(字节输出流):

    • FileOutputStream:将字节数据写入文件。
    • BufferedOutputStream:提供缓冲功能,提高写入效率。
    • ObjectOutputStream:序列化对象。

字符流

  • Reader(字符输入流):

    • FileReader:从文件读取字符数据。
    • BufferedReader:提供缓冲功能,支持按行读取文本。
    • StringReader:从字符串读取字符数据。
  • Writer(字符输出流):

    • FileWriter:将字符数据写入文件。
    • BufferedWriter:提供缓冲功能,提高写入效率。
    • PrintWriter:提供便利的方法来格式化输出文本。

流的常见操作

  1. 读取数据

    • 使用 InputStreamReaderread() 方法从流中读取数据。
  2. 写入数据

    • 使用 OutputStreamWriterwrite() 方法将数据写入流中。
  3. 关闭流

    • 使用 close() 方法关闭流,释放系统资源。建议使用 try-with-resources 语句来自动关闭流。

示例代码

字节流示例:读取和写入文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream inputStream = new FileInputStream("input.txt");
             FileOutputStream outputStream = new FileOutputStream("output.txt")) {
            
            int data;
            while ((data = inputStream.read()) != -1) {
                outputStream.write(data);
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
字符流示例:读取和写入文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CharStreamExample {
    public static void main(String[] args) {
        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();
        }
    }
}

序列化与反序列化

  • 序列化:将对象的状态转换为字节流,以便存储或传输。使用 ObjectOutputStream 进行序列化。
  • 反序列化:将字节流转换为对象的状态。使用 ObjectInputStream 进行反序列化。

总结

  • 字节流:用于处理二进制数据,适用于所有数据类型。
  • 字符流:用于处理文本数据,支持字符编码转换。
  • I/O 操作:包括读取数据、写入数据和关闭流。
  • 序列化/反序列化:用于对象的持久化存储和传输。

Java 的 I/O 流机制提供了强大的数据处理能力,适用于各种文件和数据处理任务。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值