面试题:简述 Java 中流类的超类主要有那些 ?

Java 中的流类(Stream Classes)分为字节流字符流两大类,它们的超类如下:

1. 字节流(Byte Streams)

字节流以字节为单位进行数据的读写,主要用于处理二进制数据(如图片、音频、视频等)。

  • 输入流
    • InputStream
      • 所有字节输入流的超类。
      • 提供了读取字节数据的基本方法,如 read()close() 等。
      • 常用子类:
        • FileInputStream:从文件读取字节。
        • ByteArrayInputStream:从字节数组读取字节。
        • BufferedInputStream:带缓冲区的字节输入流。
        • ObjectInputStream:用于反序列化对象。
  • 输出流
    • OutputStream
      • 所有字节输出流的超类。
      • 提供了写入字节数据的基本方法,如 write()close() 等。
      • 常用子类:
        • FileOutputStream:向文件写入字节。
        • ByteArrayOutputStream:向字节数组写入字节。
        • BufferedOutputStream:带缓冲区的字节输出流。
        • ObjectOutputStream:用于序列化对象。

2. 字符流(Character Streams)

字符流以字符为单位进行数据的读写,主要用于处理文本数据。

  • 输入流
    • Reader
      • 所有字符输入流的超类。
      • 提供了读取字符数据的基本方法,如 read()close() 等。
      • 常用子类:
        • FileReader:从文件读取字符。
        • InputStreamReader:将字节流转换为字符流。
        • BufferedReader:带缓冲区的字符输入流。
  • 输出流
    • Writer
      • 所有字符输出流的超类。
      • 提供了写入字符数据的基本方法,如 write()close() 等。
      • 常用子类:
        • FileWriter:向文件写入字符。
        • OutputStreamWriter:将字符流转换为字节流。
        • BufferedWriter:带缓冲区的字符输出流。
        • PrintWriter:提供格式化输出的字符输出流。

流类的继承关系图

InputStream (字节输入流)
    |- FileInputStream
    |- ByteArrayInputStream
    |- BufferedInputStream
    |- ObjectInputStream

OutputStream (字节输出流)
    |- FileOutputStream
    |- ByteArrayOutputStream
    |- BufferedOutputStream
    |- ObjectOutputStream

Reader (字符输入流)
    |- FileReader
    |- InputStreamReader
    |- BufferedReader

Writer (字符输出流)
    |- FileWriter
    |- OutputStreamWriter
    |- BufferedWriter
    |- PrintWriter

示例代码

// 使用字节流读取文件
try (InputStream is = new FileInputStream("example.txt")) {
    int data;
    while ((data = is.read()) != -1) {
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 使用字符流读取文件
try (Reader reader = new FileReader("example.txt")) {
    int data;
    while ((data = reader.read()) != -1) {
        System.out.print((char) data);
    }
} catch (IOException e) {
    e.printStackTrace();
}

总结

  • 字节流
    • 超类:InputStream(输入)、OutputStream(输出)。
    • 用于处理二进制数据。
  • 字符流
    • 超类:Reader(输入)、Writer(输出)。
    • 用于处理文本数据。

理解这些超类及其子类的关系,有助于更好地掌握 Java 的 IO 流操作。

THE END
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容