快捷搜索: 王者荣耀 脱发

字节流、字符流、缓冲流

IO流的分类:

根据处理数据类型的不同分为:字节流和字符流; 根据数据流向不同分为:输入流和输出流

字节流和字符流的区别:

    读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节; 处理对象不同:字节流能处理所有类型的数据(如图片,字符,音频等),而字符流只能处理字符类型的数据; 在同样使用缓冲区的前提下,字节流比字符流的效率稍微高一点。对于频繁操作且每次输入输出的数据量较小时,使用缓冲区可以带来明显的效率提升。 从源码可以看出来,字节流默认不使用缓冲区,而字符流内部使用了缓冲区。

所以,处理纯文本数据,优先考虑字符流,否则使用字节流;

详析

在Java 中,文件流负责操作文件,包括读取和写入;

FileInputStream 文件的字节输入流,父类 InputStream FileOutputStream 文件的字节输出流,父类 OutputStream FileReader 文件的字符输入流,父类 Reader FileWriter 文件的字符输出流,父类 Writer

InputStream子类:

ByteArrayInputStream:将内存的缓冲区当作数据源输入; StringBufferInputStream:将String转换成InputStream; FileInputStream:从本地文件中读取数据; PipedInputStream:资源管道的输入端,也是PipedOutputStream的输入源; SequenceInputStream:能够将2个或者以上的InputStream合并成一个单一的InputStream; FileterInputStream:为文件资源读取提供筛选功能;

OutputStream子类:

OutputStream及其子类的作用是用来表示数据输出将要去向的目标,比如:文件、资源管道、字节数组等。OutputStream也是因不同的目标有不同的子类:

ByteArrayOutputStream:在内存中创建缓冲区,所有输出的数据都会暂存在缓冲区中; FileOutputStream:将数据写出到文件中; PipedOutputStream:作为PipedInputStream的输出端,与PipedInputStream一起实现资源的“管道化”; FileterOutputStream:为文件资源写出提供筛选功能;

FilterInputStream子类:

DataInputStream:用于从流中读取基本类型的数据,比如:char、int、long等,往往与DataOutputStream配合使用; BufferedInputStream:代表“缓冲区”,可以将数据暂存在缓冲区,使用它可以防止每次读取都进行实际的写操作; LineNumberInputStream:追踪输入流中的行号,可做调试用; PushbackInputStream:能弹出一个字节的缓冲区,能够将文件的最后一个字符返回(操作系统使用-1表示磁盘文件的结尾标记),通常作为编译器的扫描器,往往被编译器调用;

FilterOutputStream子类:

DataOutputStream:用于从流中写出基本类型的数据,比如:char、int、long等,往往与DataInputStream配合使用; PrintStream:用于格式化输出,比如:java 的运行控制台打印;能够与DataOutputStream相互配合使用:DataOutputStream负责数据的存储,PrintStream负责数据的显示; BufferedOutputStream:代表“缓冲区”,可以将数据暂存在缓冲区,使用它可以防止每次都进行实际的写操作;可以使用flush()方法将缓冲区数据一次性写出;

经验分享 程序员 微信小程序 职场和发展