相关疑难解决方法(0)

UNIX排序命令如何排序一个非常大的文件?

UNIX sort命令可以像这样对一个非常大的文件进行排序:

sort large_file
Run Code Online (Sandbox Code Playgroud)

排序算法是如何实现的?

为什么它不会导致过多的内存消耗?

sorting shell

97
推荐指数
6
解决办法
6万
查看次数

计算字节数组的SHA-1

我正在寻找一种方法来获取带有Java字节数组的SHA-1校验和作为消息.

我应该使用第三方工具还是JVM中内置的东西可以提供帮助?

java sha1

46
推荐指数
3
解决办法
5万
查看次数

Java大文件磁盘IO性能

我的硬盘上有两个(每个2GB)文件,想要将它们相互比较:

  • 使用Windows资源管理器复制原始文件大约需要.2-4分钟(即读写 - 在同一物理和逻辑磁盘上).
  • 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次展开获得了最佳结果,但与磁盘读取相比,花费的时间比较小,因此加速很小.看起来我无能为力;-(

java comparison performance nio stream

17
推荐指数
5
解决办法
2万
查看次数

标签 统计

java ×2

comparison ×1

nio ×1

performance ×1

sha1 ×1

shell ×1

sorting ×1

stream ×1