相同点

字符流和字节流都有缓冲的实现类,提高了读写的效率:

1
2
字符流:BufferedReader、BufferedWriter
字节流:BufferedInputStream、BufferedOutputStream

类层次图

区别

字节流 字符流
操作基本单元 字节 字符(Unicode 码元)
存在位置 可存在于文件、内存中。硬盘上的所有文件都是以字节形式存在的。 只存在于内存中。
使用场景 适合操作文本文件之外的文件。例:图片、音频、视频。 适合操作文本文件时使用。
Java 相关类 InputStream、OutputStream 等。 Reader、Writer 等。

正确用法是:Java 使用字符流读取文本文件,使用字节流读取非文本文件。

原因是:

字符流读文本文件时可以自动处理文件编码,确保正确地解析文件中的字符。

使用字符流读取非文本文件可能会导致一些问题。例如,字符流可能会将一些特定的字节序列(如 0x0A)视为文件的行结尾,从而导致数据丢失。所以在读取这些文件时使用字节流比字符流更好。