use*_*776 5 java buffer flush bufferedoutputstream
我理解背后的理论BufferedOutputStream.字节被写入缓冲区数组直到它已满,然后写入(刷新)到底层流 - 这个想法是它比逐字节写入更快,因为OS调用更少.
但是,通过查看BufferedOutputStream类和方法(BufferedOutputStream.java)的实现,似乎最终,缓冲区中的字节只是逐字节写入.
我认为情况是这样的,因为:
在BufferedOutputStream.write(byte b [],int off,int len)中,它有行out.write(b,off,len).由于out是OutputStream的实例,而不是BufferedOutputStream,因此它调用OutputStream.write(byte [],int,int).这又使用for循环逐字节写入
请有人澄清实际发生了什么,以及它如何更快?
从您的链接:
/** Flush the internal buffer */
private void flushBuffer() throws IOException {
if (count > 0) {
out.write(buf, 0, count);
count = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
...
/**
* Flushes this buffered output stream. This forces any buffered
* output bytes to be written out to the underlying output stream.
*
* @exception IOException if an I/O error occurs.
* @see java.io.FilterOutputStream#out
*/
public synchronized void flush() throws IOException {
flushBuffer();
out.flush();
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它将flush()所有缓冲区内容一次性写入底层流,然后级联刷新。BufferedOutputStream然后重新实现write(byte b[], int off, int len)and void write(int b)(类中的核心方法,每次写入都委托给该类),以便它写入缓冲区,并在必要时刷新。
| 归档时间: |
|
| 查看次数: |
3940 次 |
| 最近记录: |