字节流、字符流、缓冲流

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

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木泽锐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值