当前位置:   article > 正文

字节流、字符流、缓冲流_字节流没有缓冲区,

字节流没有缓冲区,

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()方法将缓冲区数据一次性写出;

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/469678
推荐阅读
相关标签
  

闽ICP备14008679号