Fra*_*fka 0 java buffer process disk stream
您可以为BufferedOutputStream
构造函数提供缓冲区大小的int参数.我的szenario我有一个进程写入磁盘和从磁盘读取进程.具有8192字节的默认缓冲区会导致大文件的高度碎片化.
现在我想知道如果我将缓冲区大小提升到1 Mb,是否可以减少碎片.
我认为这应该有效.但BufferedOutputStream
如果我总是打电话,他仍然会尊重我的缓冲
BufferedOutputStream.write(smallBuffer,0,i); // i being smaller than 8192
我很小,因为我正在网上捕捉小的paketes(8192字节).但我想要BufferedOutputStream
真正缓冲很多,而不是决定先冲洗?
是BufferedOutputStream
"愚蠢的",足以等到缓冲区已满或者flush()
被调用.或者它安装了一些基于时间的冲洗机制?
BufferedOutputStream不使用任何基于时间的算法或其他统计信息来在内部调用flush.它会在缓冲区已满时刷新,或者在explitily(或缓冲流关闭之前)刷新它.
换句话说:较大的缓冲区大小将减少用例的碎片.
根据Javadoc的说法:
通常,此方法将来自给定数组的字节存储到此流的缓冲区中,根据需要将缓冲区刷新到基础输出流.
http://download.oracle.com/javase/6/docs/api/java/io/BufferedOutputStream.html
如果你看看源代码(Sun实现):
public synchronized void write(byte b[], int off, int len) throws IOException {
//flushBuffer() if necessary
System.arraycopy(b, off, buf, count, len);
count += len;
}
Run Code Online (Sandbox Code Playgroud)
的flushBuffer()
,如果它附加到缓冲器将导致溢出只有在数据块是比整个缓冲器,就会发生或.
所以快点回答:是的.并且没有隐含的flush()
,必须在必要时手动调用,缓冲区尚未填充.
归档时间: |
|
查看次数: |
2393 次 |
最近记录: |