增加Java FileInputStream使用的内部缓冲区大小

时间:2011-01-26 03:43:10

标签: java stream io inputstream fileinputstream

read(byte[])上呼叫FileInputStream时,即使byte[]指数级大,读取大小也始终为8k。

如何增加每次通话返回的最大阅读量?

请不要建议仅仅掩盖FileInputStream的限制的方法。


更新:似乎没有真正的解决方案。但是,对于1G文件,我在我的系统上计算了大约226uS的方法调用开销。可以肯定地说,这不会以任何真实的方式影响性能。

3 个答案:

答案 0 :(得分:1)

将其包装在BufferedInputStream中,允许您指定缓冲区大小。

答案 1 :(得分:1)

您可以尝试使用NIO对内存映射文件,但我不确定8K的问题是什么。 您可以将8K复制到更大的阵列或使用返回的长度来调用

public int read(byte[] b,
                int off,
                int len)
         throws IOException

off为上次读取的返回值。

答案 2 :(得分:0)

您看到的每个读取的大小可能是操作系统本身使用的缓冲区大小。因此,您可能必须在操作系统级别进行更改。你如何做到这一点将取决于系统。您可以在创建文件系统时指定块大小。传统上,Unix文件系统可以实现这一点。虽然具有讽刺意味的是,我认为该功能被用于为文件系统提供较小的块,预计会有许多小文件。