为什么只有OutputStream才有flush()方法,而InputStream没有该方法

调用close方法在关闭流之前,会强制刷新一下IO缓冲,这个在API里面也有提到。

flush是要求将该OutputStream的临时缓存清空,强制写到底层的OutputStream中.flush方法的意思是强制将缓冲区所有的数据输出!
例如你外面套了一层BufferedOutputStream,那么你写入的内容其实有一部分还保存在这个Stream中,而没有写入底层的。所以在某些时候必须调用flush要求写入.

  java.io.OutputStream.flush() 方法刷新此输出流并强制将所有缓冲的输出字节被写出。刷新的常规协定是,调用它是一个迹象表明,如果以前写的任何字节都被缓冲的输出流的实现,如字节应立即写入到它们的目的地。

此流的预期目标是由底层的操作系统,例如一个文件,然后刷新流保证提供了一个抽象只是先前写入的字节流传递给操作系统进行写入;它并不能保证他们实际上写的是一个物理设备,如磁盘驱动器

flush刷新此输出流并强制写出所有缓冲的输出字节。flush 的常规协定是:如果此输出流的实现已经缓冲了以前写入的任何字节,则调用此方法指示应将这些字节立即写入它们预期的目标。 
    如果此流的预期目标是由基础操作系统提供的一个抽象(如一个文件),则刷新此流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。

OutputStream中的flush方法不执行任何操作。


InputStream的read 方法,使用零个参数的 read 方法,一次读取一个字节,并将之放入该数组。 OutputStream的wirte 将指定字节写入当前输出流。 
read 一次一个字节当然不要flush 
wirte 一次多个就要flush

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
InputStreamOutputStream,Reader和Writer类都是Java IO类库中的重要类,它们的功能如下: 1. InputStream是一个抽象类,它提供了读取字节流的方法,如read()和read(byte[] b)等。它的子类如FileInputStream和ByteArrayInputStream可以用来读取不同来源的字节流。 2. OutputStream也是一个抽象类,它提供了写入字节流的方法,如write(byte[] b)和flush()等。它的子类如FileOutputStream和ByteArrayOutputStream可以用来写入不同目标的字节流。 3. Reader是一个抽象类,它提供了读取字符流的方法,如read()和read(char[] cbuf)等。它的子类如FileReader和StringReader可以用来读取不同来源的字符流。 4. Writer也是一个抽象类,它提供了写入字符流的方法,如write(String str)和flush()等。它的子类如FileWriter和StringWriter可以用来写入不同目标的字符流。 它们的异同点如下: 相同点: 1. 都是Java IO类库中的类。 2. 都是用于读写数据的类。 3. 都提供了不同的子类来处理不同的数据来源和目标。 4. 都有相似的方法,如read()和write()。 不同点: 1. InputStreamOutputStream是字节流,而Reader和Writer是字符流。 2. InputStreamOutputStream是读写字节数据,而Reader和Writer是读写字符数据。 3. InputStream和Reader是用于读取数据的类,而OutputStream和Writer是用于写入数据的类。 4. InputStream和Reader提供了字节和字符转换的方法,如InputStreamReader和BufferedReader,而OutputStream和Writer没有提供类似的方法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值