Java中的缓冲区大小

时间:2014-02-09 19:06:06

标签: java file io buffer

我对Java中的缓冲区大小有一点疑问。为什么我们将缓冲区大小设置为10242^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数组?

2 个答案:

答案 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也是一种选择。