UNIX sort命令可以像这样对一个非常大的文件进行排序:
sort large_file
Run Code Online (Sandbox Code Playgroud)
排序算法是如何实现的?
为什么它不会导致过多的内存消耗?
我正在寻找一种方法来获取带有Java字节数组的SHA-1校验和作为消息.
我应该使用第三方工具还是JVM中内置的东西可以提供帮助?
我的硬盘上有两个(每个2GB)文件,想要将它们相互比较:
java.io.FileInputStream两次读取并在每个字节的字节上比较字节数组需要20多分钟.java.io.BufferedInputStream 缓冲区为64kb,文件以块的形式读取然后进行比较.比较完成是一个紧凑的循环
int numRead = Math.min(numRead[0], numRead[1]);
for (int k = 0; k < numRead; k++)
{
if (buffer[1][k] != buffer[0][k])
{
return buffer[0][k] - buffer[1][k];
}
}
Run Code Online (Sandbox Code Playgroud)我该怎么做才能加快速度呢?NIO应该比普通的流更快吗?Java无法使用DMA/SATA技术,而是做一些缓慢的OS-API调用吗?
编辑:
谢谢你的答案.我做了一些基于它们的实验.安德烈亚斯表示
流或
nio方法没有太大差别.
更重要的是正确的缓冲区大小.
我的实验证实了这一点.由于文件是以大块读取的,因此即使是额外的缓冲区(BufferedInputStream)也不会提供任何内容.优化比较是可能的,并且我通过32次展开获得了最佳结果,但与磁盘读取相比,花费的时间比较小,因此加速很小.看起来我无能为力;-(