1

调用read(byte[])aFileInputStream时,读取大小始终为 8k,即使byte[]是指数级大。

如何增加每次调用返回的最大读取量?

请不要提出仅仅掩盖FileInputStream.


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

4

3 回答 3

1

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

于 2011-01-26T03:46:18.010 回答
1

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

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

off 是上次读取的返回值。

于 2011-01-26T03:52:50.993 回答
0

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

于 2013-07-11T20:28:54.847 回答