一:java的IO流
- Java中的I/O(输入/输出)流是用于处理数据输入和输出的抽象类。
- Java I/O流主要分为两大类:字节流(Byte Streams)和字符流(Character Streams)。
- 字节流:用于处理二进制数据,包括InputStream和OutputStream两个主要类及其子类。
- 字符流:用于处理文本数据,包括Reader和Writer两个主要类及其子类。
二:字节和字符流区别
2.1处理的数据类型
- 字节流
- 处理的是字节数据,即8位二进制数据,在计算机中,所有的文件都能以二进制(字节)形式存在。
- Java的I/O中针对字节传输操作提供了一系列流,统称为字节流。
- 这些流包括两个抽象基类InputStream和OutputStream,分别处理字节流的输入和输出
- 字符流
- 处理的是字符数据,即Unicode字符,通常是16位二进制数据。
- 字符流是16位unicode字符流,主要用于处理字符和文本文件。
- 由于Java中字符是采用Unicode标准,因此字符流在处理文本数据时具有更高的效率和准确性。
2.2编码问题
- 字节流
- 因为直接操作的是字节,没有编码问题,字节流可以处理任意类型的数据,包括文本、图片、音频等。
- 当使用字节流处理文本文件时,需要自行处理编码问题,否则可能会出现乱码
- 字符流
- Java使用Unicode编码来表示字符,而外部数据源可能使用不同的编码方式。
- 字符流在读取或写入文本文件时,会自动进行字符编码的转换,使用字符流处理文本文件时通常不需要担心编码问题。
2.3使用场景
-
字节流:
- 字节流以字节(8bit)为单位,适合处理图片、视频、音频等二进制文件,以及网络传输等场景。
- 由于字节流直接操作字节数据,因此具有更高的灵活性和效率
-
字符流:
- 字符流以字符为单位,根据码表映射字符,一次可能读多个字节,适合处理文本文件、文本数据等场景。
- 字符流在处理文本数据时具有更高的效率和准确性,因为字符流会自动处理字符编码的转换
三:IO流相关类体系概览
功能不同,但是具有共性内容,通过不断抽象形成4个抽象类,抽象类下面有很多子类是具体的实现
- 字符流 Reader/Writer
- 字节流 InputStream/OutputStream