409. Java 文件操作基础 - 内存中的 I/O 流

409. Java 文件操作基础 - 内存中的 I/O 流

在 Java I/O 中,我们不仅可以操作文件,还可以操作 内存中的数据结构,比如 字符数组、字节数组或字符串。这种技术在某些场景下非常有用,例如:

  • 文件格式处理JPEGZIP 等格式可能需要在文件开头写入某个字段长度,但长度在写入前无法计算。
  • 压缩数据:计算原始数据大小很简单,但计算压缩后数据的大小可能很复杂。可以先写入内存流,然后得到实际字节数。
  • 测试和缓存:不依赖文件系统,直接在内存操作数据,速度更快。

1️⃣ 操作字符数组:CharArrayReaderCharArrayWriter

Java 提供了两类内存字符流:

类名 作用
CharArrayReader char[] 数组中读取字符(继承自 Reader
CharArrayWriter 将字符写入 char[] 数组(继承自 Writer

⚠️ 它们只是对 ReaderWriter 的装饰,不添加新方法,只是提供 内存操作的介质


🔹 示例:写入字符到内存流

import java.io.*;

public class CharArrayWriterExample {
    public static void main(String[] args) throws IOException {
        CharArrayWriter writer = new CharArrayWriter();

        writer.write("Hello, In-Memory IO!");
        writer.write('\n');
        writer.write("Java I/O is flexible.");

        // 将内存中的字符数组转换为字符串
        String result = writer.toString();
        System.out.println("Written content:\n" + result);

        // 获取内存中的字符数组
        char[] chars = writer.toCharArray();
        System.out.println("Number of chars written: " + chars.length);

        writer.close();
    }
}

讲解

  • CharArrayWriter 类似文件流,但内容在内存中
  • .toString() 可以快速获取字符串
  • .toCharArray() 可以获取底层数组,方便处理

🔹 示例:从字符数组中读取数据

import java.io.*;

public class CharArrayReaderExample {
    public static void main(String[] args) throws IOException {
        char[] data = "Read me from memory!".toCharArray();
        CharArrayReader reader = new CharArrayReader(data);

        int c;
        while ((c = reader.read()) != -1) {
            System.out.print((char)c);
        }
        System.out.println();
        reader.close();
    }
}

讲解

  • CharArrayReader 从内存数组中读取字符
  • 使用 read() 方法逐个读取字符
  • 结束时返回 -1

2️⃣ 使用场景总结

  • 临时数据处理:不需要文件存储,减少 I/O 开销
  • 压缩和格式化:先写到内存,处理完再写入磁盘或网络
  • 测试:方便单元测试,不依赖文件系统
  • BufferedReaderBufferedWriter 等其他流组合,可提升效率
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容