在read(byte[])
上呼叫FileInputStream
时,即使byte[]
指数级大,读取大小也始终为8k。
如何增加每次通话返回的最大阅读量?
请不要建议仅仅掩盖FileInputStream
的限制的方法。
更新:似乎没有真正的解决方案。但是,对于1G文件,我在我的系统上计算了大约226uS的方法调用开销。可以肯定地说,这不会以任何真实的方式影响性能。
答案 0 :(得分:1)
将其包装在BufferedInputStream中,允许您指定缓冲区大小。
答案 1 :(得分:1)
您可以尝试使用NIO对内存映射文件,但我不确定8K的问题是什么。 您可以将8K复制到更大的阵列或使用返回的长度来调用
public int read(byte[] b,
int off,
int len)
throws IOException
off为上次读取的返回值。
答案 2 :(得分:0)
您看到的每个读取的大小可能是操作系统本身使用的缓冲区大小。因此,您可能必须在操作系统级别进行更改。你如何做到这一点将取决于系统。您可以在创建文件系统时指定块大小。传统上,Unix文件系统可以实现这一点。虽然具有讽刺意味的是,我认为该功能被用于为文件系统提供较小的块,预计会有许多小文件。