我对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];
while ((read = inputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
outputStream.close();
inputStream.close();
outputStream.write(bytes, 0, read);
如何运作?为什么我们使用bytes
数组?
答案 0 :(得分:1)
文件流中bytes.length
字节长度为bytes[]
,并将它们存储在字节数组bytes[]
中。然后outputStreem中的read个字节形成{{1}}数组。有关更多信息,请阅读write文档。
答案 1 :(得分:1)
为避免浪费命中文件系统,字节大小应为文件系统扇区大小的倍数(例如512字节)。
同样适用于CPU L1缓存。
大多数Intel 486 CPU具有1K L1缓存,因此值1024
。
Pentium CPU至少有8K L1缓存,因此也经常使用8 * 1024
。
最近的文件系统的扇区大小为4K
,最近的CPU至少有64K L1缓存,因此64 * 1024
也是一种选择。