最近在做一个网络下载功能,I/O操作时,操作完OutputStream
时写了flush()
,目的是刷新输出流,将缓存写入物理设备。突然就想,这里是否需要flush()
呢?
我当时的代码:
123456FileOutputStream outputStream = new FileOutputStream(file);// 写入流outputStream.write(buffer, 0, length);// flush()outputStream.flush();FileOutputStream
继承了OutputStream
但是并没有覆写flush()
方法,而OutputStream
中flush()
是一个空方法。123大专栏 OutputStream之flush() · 李大白写点儿啥 class="line">// OutputStream.javapublic void () throws IOException {}所以,直接调用
OutputStream
的flush()
方法是没有意义的。再看一下
BufferedOutputStream
1234public synchronized void () throws IOException {flushBuffer();out.flush();}这个类才真的具有
flush()
功能。- 需要注意的是,
flush()
方法不能保证缓存的数据一定写入了物理设备,它只是发起一个操作,具体写入物理设备由操作系统实现。