【每日一题】Java 基础篇 – IO流操作解析:你真的了解文件读写和数据传输吗?

在 Java 编程中,IO 流是一个重要的概念。

它提供了一种方便的方式来读取和写入数据,无论是与文件、网络还是其他数据源进行交互。

第一部分:基础知识

1. 什么是 IO 流?
  • IO 流代表着输入(Input)和输出(Output)的数据流。它以字节或字符的形式传输数据。
  • 输入流用于从数据源(如文件、网络等)读取数据。
  • 输出流用于向目标(如文件、网络等)写入数据。
2. IO 流的分类
  • 根据数据类型的不同,IO 流可以被分为字节流和字符流。
  • 字节流用于处理二进制数据,如图像、音频等。
  • 字符流用于处理文本数据,如文本文件的读写。
3. 常见的 IO 流类
  • FileInputStream/FileOutputStream:用于读写字节数据的文件流。
  • FileReader/FileWriter:用于读写字符数据的文件流。
  • BufferedInputStream/BufferedOutputStream:提供缓冲功能,提高读写性能。
  • BufferedReader/BufferedWriter:提供缓冲功能,方便按行读写文本数据。
  • ByteArrayInputStream/ByteArrayOutputStream:用于读写字节数组。
  • ObjectInputStream/ObjectOutputStream:用于对象的序列化和反序列化。
  • 其他常见流类:PipedInputStream/PipedOutputStream、DataInputStream/DataOutputStream、RandomAccessFile等。

第二部分:基本读写操作

1. 使用 FileInputStream 和 FileOutputStream
  • 创建 FileInputStream 实例,并使用 read() 方法读取字节数据。
  • 创建 FileOutputStream 实例,并使用 write() 方法写入字节数据。
// 示例代码
try (FileInputStream fis = new FileInputStream("input.txt");
     FileOutputStream fos = new FileOutputStream("output.txt")) {
    int data;
    while ((data = fis.read()) != -1) {
        fos.write(data);
    }
catch (IOException e) {
    e.printStackTrace();
}
2. 使用 FileReader 和 FileWriter
  • 创建 FileReader 实例,并使用 read() 方法读取字符数据。
  • 创建 FileWriter 实例,并使用 write() 方法写入字符数据。
// 示例代码
try (FileReader fr = new FileReader("input.txt");
     FileWriter fw = new FileWriter("output.txt")) {
    int data;
    while ((data = fr.read()) != -1) {
        fw.write(data);
    }
catch (IOException e) {
    e.printStackTrace();
}

第三部分:高级读写操作

1. 使用 BufferedInputStream 和 BufferedOutputStream
  • 创建 BufferedInputStream 实例,将其包装在 FileInputStream 上,提供缓冲功能。
  • 创建 BufferedOutputStream 实例,将其包装在 FileOutputStream 上,提供缓冲功能。
// 示例代码
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("input.txt"));
     BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
    int data;
    while ((data = bis.read()) != -1) {
        bos.write(data);
    }
catch (IOException e) {
    e.printStackTrace();
}
2. 使用 BufferedReader 和 BufferedWriter
  • 创建 BufferedReader 实例,将其包装在 FileReader 上,提供缓冲和按行读取的功能。
  • 创建 BufferedWriter 实例,将其包装在 FileWriter 上,提供缓冲和按行写入的功能。
// 示例代码
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
     BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        bw.write(line);
        bw.newLine(); // 写入换行符
    }
catch (IOException e) {
    e.printStackTrace();
}

第四部分:其他常用操作

1. 对象的序列化和反序列化
  • 使用 ObjectOutputStream 将对象序列化并写入文件。
  • 使用 ObjectInputStream 从文件中读取对象并进行反序列化。
// 示例代码
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"));
     ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
    MyClass obj = new MyClass();
    oos.writeObject(obj); // 对象序列化

    MyClass newObj = (MyClass) ois.readObject(); // 对象反序列化
catch (IOException | ClassNotFoundException e) {
    e.printStackTrace();
}
2. 随机访问文件
  • 使用 RandomAccessFile 可以在文件中任意位置读写数据。
// 示例代码
try (RandomAccessFile raf = new RandomAccessFile("data.txt""rw")) {
    // 读取数据
    raf.seek(10); // 设置文件指针位置
    byte[] buffer = new byte[1024];
    int bytesRead = raf.read(buffer);

    // 写入数据
    raf.seek(20); // 设置文件指针位置
    raf.write(buffer, 0, bytesRead);
catch (IOException e) {
    e.printStackTrace();
}


作者个人知识分享,如有错误指正!

原文始发于微信公众号(Coder香):【每日一题】Java 基础篇 – IO流操作解析:你真的了解文件读写和数据传输吗?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/217585.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!