面试题:Java 的 I/O 流是什么?

在Java中,I/O流(Input/Output Streams)是用于处理输入输出操作的基础工具。它们提供了一种统一的方式来读取和写入不同类型的资源,如文件、网络连接或内存缓冲区。通过使用流,Java程序可以以字节或字符的形式传输数据。

I/O流的分类

Java中的I/O流主要分为两大类:字节流字符流

字节流(Byte Streams)

字节流处理8位的字节数据。适用于任何类型的二进制数据,如图像、视频等。所有字节流类都是InputStreamOutputStream抽象类的子类。

  • InputStream:用于从源读取字节数据。
    • 常见子类包括FileInputStreamByteArrayInputStreamBufferedInputStream等。
  • OutputStream:用于向目的地写入字节数据。
    • 常见子类包括FileOutputStreamByteArrayOutputStreamBufferedOutputStream等。

字符流(Character Streams)

字符流处理16位Unicode字符,更适合处理文本数据。所有字符流类都是ReaderWriter抽象类的子类。

  • Reader:用于从源读取字符数据。
    • 常见子类包括FileReaderCharArrayReaderBufferedReader等。
  • Writer:用于向目的地写入字符数据。
    • 常见子类包括FileWriterCharArrayWriterBufferedWriter等。

缓冲流

为了提高效率,Java提供了带缓冲功能的流,如BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter。这些流内部维护了一个缓冲区,减少了直接与底层资源交互的次数,从而提高了性能。

标准流

Java提供了三个标准流,分别是:

  • System.in:标准输入流,默认是从键盘读取数据。
  • System.out:标准输出流,默认是向控制台打印数据。
  • System.err:标准错误流,默认也是向控制台打印错误信息。

使用示例

写入文件

import java.io.*;

public class FileWritingExample {
    public static void main(String[] args) throws IOException {
        String content = "Hello, world!";
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("example.txt"))) {
            writer.write(content);
        }
    }
}

读取文件

import java.io.*;

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

理解Java的I/O流模型对于处理各种输入输出任务至关重要。无论是简单的文件操作还是复杂的网络通信,掌握如何正确使用流都能极大地提高编程效率和代码质量。

THE END
喜欢就支持一下吧
点赞12 分享