我正在使用ByteBuffer.allocateDirect()来分配一些缓冲内存,以将文件读入内存,然后将该文件的字节进行哈希处理并得到文件哈希值(SHA)。输入文件的大小范围很大,从几KB到几GB不等。
我已经阅读了几个线程和页面(甚至在SO上),涉及选择缓冲区大小的问题。有人建议尝试选择本机FileSystem使用的缓冲区大小,以试图最小化读取操作的部分块等机会。例如,缓冲区为4100字节,而NTFS默认为4096字节,所以额外的4位需要单独的读取操作,非常浪费资源。
因此,坚持使用2的幂次方,如1024、2048、4096、8192等。我看到一些人推荐使用32KB的缓冲区,另一些人则建议将缓冲区的大小设置为输入文件的大小(对于小文件可能很好,但大文件呢?)。
坚持使用本机块大小的缓冲区有多重要?现代的SATA驱动器或更好的驱动器至少具有8MB的缓存,并且有其他现代操作系统的“魔法”来优化I/O,那么缓冲区大小有多关键,我应该如何确定我的缓冲区大小?我可以静态设置缓冲区大小,也可以动态确定。感谢您的任何见解。
我已经阅读了几个线程和页面(甚至在SO上),涉及选择缓冲区大小的问题。有人建议尝试选择本机FileSystem使用的缓冲区大小,以试图最小化读取操作的部分块等机会。例如,缓冲区为4100字节,而NTFS默认为4096字节,所以额外的4位需要单独的读取操作,非常浪费资源。
因此,坚持使用2的幂次方,如1024、2048、4096、8192等。我看到一些人推荐使用32KB的缓冲区,另一些人则建议将缓冲区的大小设置为输入文件的大小(对于小文件可能很好,但大文件呢?)。
坚持使用本机块大小的缓冲区有多重要?现代的SATA驱动器或更好的驱动器至少具有8MB的缓存,并且有其他现代操作系统的“魔法”来优化I/O,那么缓冲区大小有多关键,我应该如何确定我的缓冲区大小?我可以静态设置缓冲区大小,也可以动态确定。感谢您的任何见解。