Java中的缓冲区大小
我有一个关于Java中缓冲区大小的小问题。为什么要将缓冲区大小设置为Java中的缓冲区大小,java,file,io,buffer,Java,File,Io,Buffer,我有一个关于Java中缓冲区大小的小问题。为什么要将缓冲区大小设置为1024或2^n。例如: inputStream = file.getInputStream(); File newFile = new File("C:/uploads/operators.xml"); outputStream = new FileOutputStream(newFile); int read = 0; byte[] bytes = new byte[1024];
1024
或2^n
。例如:
inputStream = file.getInputStream();
File newFile = new File("C:/uploads/operators.xml");
outputStream = new FileOutputStream(newFile);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
outputStream.close();
inputStream.close();
如何
outputStream.write(字节,0,读取)代码>有效吗?为什么要使用字节
数组?从文件流中选择字节长度的字节。长度
,并将它们存储在字节数组字节[]
。然后以outputStreem形式创建字节字节[]
数组。有关详细信息,请阅读文档。为避免浪费对文件系统的命中,字节大小应为文件系统扇区大小的倍数(例如512字节)
这同样适用于CPU一级缓存。
大多数Intel 486 CPU都有1K一级缓存,因此值1024
。
奔腾CPU至少有8K一级缓存,因此也经常使用8*1024
最近的文件系统的扇区大小为4K
,而最近的CPU至少有64K的一级缓存,因此64*1024
也是一种选择。但为什么2^n
?为什么不仅仅是1000
?@Tony因为。那么为什么我们要使用KB呢?@Tony举个例子。这正确地回答了更多问题。实际上,文件系统不会一次读取或写入一个字节。它一次移动字节块。我试图回忆一下我不久前读到的关于此的内容,因此可能不正确,但我相信如果您选择的缓冲区大小为508
,并且系统一次移动512
字节,那么您试图保存的四个字节无论如何都不会被文件系统使用。