首页 > 试题广场 >

以下哪个类包含方法flush()?()

[单选题]

以下哪个类包含方法flush()?()

  • InputStream
  • OutputStream
  • A 和B 选项都包含
  • A  和B 选项都不包含
flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
发表于 2019-07-03 15:48:04 回复(6)

//——————–flush()的作用————————–

笼统且错误的回答:

缓冲区中的数据保存直到缓冲区满后才写出,也可以使用flush方法将缓冲区中的数据强制写出或使用close()方法关闭流,关闭流之前,缓冲输出流将缓冲区数据一次性写出。flash()和close()都使数据强制写出,所以两种结果是一样的,如果都不写的话,会发现不能成功写出

针对上述回答,给出了精准的回答

FileOutPutStream继承outputStream,并不提供flush()方法的重写所以无论内容多少write都会将二进制流直接传递给底层操作系统的I/O,flush无效果而Buffered系列的输入输出流函数单从Buffered这个单词就可以看出他们是使用缓冲区的,应用程序每次IO都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备

使用BufferedXXXStream。默认缓冲区大小是8K。读的时候会一直填满缓冲区(或者文件读取完毕),写的时候也是等缓冲区满了之后(或者执行flush操作)才将内容送入内核缓冲区。效率高的原因就是避免了每读一个字节都要陷入操作系统内核(这是个耗时的操作)。具体代码,题主自己查API吧。

再附上来自百度知道的一段问题回答。

flush()意思是把缓冲区的内容强制的写出。 因为操作系统的某些机制,为了防止一直不停地磁盘读写,所以有了延迟写入的概念,(注意不要和frush()刷新混淆了),主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。。

在网络web服务器上也是,为了防止写一个字节就发送一个消息,所以有缓冲区的概念,比如64K的内存区域,缓冲区写满了再一次性写入磁盘之中(或者发送给客户端浏览器)。

flush方法一般是程序写入完成时执行。随后跟着close方法。例如:

?
1
2
3
4
5
// 取得输出流。当然,看具体环境。
PrintWriter out = Util.getWriter();
out.println("输出一些信息,可能很多");
out.flush();
out.close();

简单来说,flush()方法是输出储存在内存中全部的内容(批量输出)。 常用比如FileWriter类中就是一个典型,除了可以使用flush输出,最后调用close方法也会批量输出。

?
1
2
3
4
5
6
7
8
9
importjava.io.FileWriter;
importjava.io.IOException;
publicclassA04 {
    publicstaticvoidmain(String args[]) {
        FileWriter fw;
        try{
            fw =newFileWriter("C:\\try.txt");
            fw.write("Hello");
            //fw.close(); //这句话不加,无法写入文件,文件空白! System.out.println("OK"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
发表于 2019-09-07 19:36:08 回复(1)
InputStream没有实现flushable接口,OutputStream实现了flushable接口。这道题没答案
发表于 2019-07-03 23:16:55 回复(6)

1)对于字符写出流,如FileWriter,必须要使用到flush将字符缓冲区的内容写到文件中。字符缓冲区的数据是按字符算的,必须集齐一个字符(汉字是2个字符或者3个字符)的数据才能将数据写入文件;

2)对于字节写出流,如FileOutputStream等,他们可以直接把数据写入文件,不需要用到flush()刷新,因为他们是一个字节一个字节写入的。
但是,字节写出流也有flush()方法(继承自父类OutoutStream)为何字节流的类要提供flush()这个方法呢?
查看API知道,OutputStream的直接子类有:FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream,ByteArrayOutputStream等,其中绝大部重写flush方法的子类调用的还是父类的空的flush方法。
我们查看FilterOutputStream的子类BufferedOutputStream重写的flush方法,调用了flushBuffer()方法,可以知道构造器的默认缓冲区是8k,如果读取的文件小于8k而没有调用flush方法,就不会将缓冲数据写到输出流,文件内容为空。

我之前一直以为字节流是没有flush()方法的,MARK!

编辑于 2020-04-25 23:05:27 回复(0)
  • OutputStream
    OutputStream
  • InputStream
    图片说明
发表于 2020-12-28 15:15:17 回复(2)
flush()方法强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()方法。
发表于 2021-04-30 11:10:35 回复(0)
flush()一般用于刷新缓冲区的数据,一般是输出流
发表于 2019-09-03 09:49:20 回复(0)
不是BufferedOutputStream才是flush()吗
发表于 2019-07-24 09:40:46 回复(1)
发表于 2022-09-26 10:52:58 回复(0)
其实是很奇怪的,flush()方法是OutputStream这个父类的方法,而且是空的方法,像BufferOutputStream这些子类都是重写了这个方法。感觉这种设计怪怪的,像FileOutputStream子类就不会用到这个方法,也是继承的空方法。不过其实怎么都说的过去,看设计这些API的人怎么爽怎么来吧。
发表于 2022-02-03 16:28:43 回复(2)
flush()函数强制将缓冲区中的字符流、字节流等输出,如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满,所以在关闭输出流之前要调用flush()。
发表于 2020-12-18 21:59:39 回复(0)
flush刷新缓冲区。 如果字符流没有被填满,就等待填满。 关闭输出流之前用
编辑于 2020-07-23 08:13:31 回复(0)
flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
发表于 2020-06-23 14:44:01 回复(0)
flush()方法是输出储存在内存中全部的内容(批量输出)。
flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
发表于 2020-03-31 17:33:24 回复(0)
flush()函数的作用是强制将缓冲区中的字符流、字节流等输出,原因是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。
发表于 2023-04-21 23:10:20 回复(0)
flush()的作用是使缓冲区中的字节流,字符流输出。
之所以用到fulsh()是因为对于缓冲区,只有在满了之后才会输出,所以在最后输出流关闭之前,要先使用fush()清空缓冲流中的内容。
发表于 2023-03-17 14:40:13 回复(0)
outputstream实现flushablle接口并存在flush方法,inputstream没有实现flushable也没有flush方法
发表于 2022-09-15 10:46:25 回复(0)
关闭输出流之前要调用flush
发表于 2022-06-25 20:10:56 回复(0)
性质为输出数据的流才会有fresh吧,输入流是没有的
发表于 2021-03-20 16:29:43 回复(0)