Dur*_*oop 0 java git hash scala sha
我知道git很快但我最近才知道它的速度有多快.
在我的一个项目中,我正在尝试计算一个巨大文件(82 MB,850k行)的SHA-256哈希值,并且花了一分多钟来计算它(包括散列和其他一些小操作).
即使使用SHA-1,它也花了我30多秒,而git似乎只用了一两秒钟.
我Security通过组合文件的所有行来使用java的API 计算Scala中的哈希值.
val lines = Source.fromFile(filePath, "UTF-8").getLines().toList
MessageDigest.getInstance("SHA-256")
.digest(lines.mkString("\n").getBytes).map("%02x".format(_)).mkString
Run Code Online (Sandbox Code Playgroud)
那么,Git如何快速地做到这一点,或者说更重要的问题,为什么我的方法如此缓慢?
编辑:对于那些不熟悉scala语法的人,lines将在a List和mkStringmethod 中包含文件的所有行,返回列表中与给定分隔符组合的所有元素的字符串.
重新发布我之前的评论(扩展).
你做的是:
步骤2-6似乎没必要.我建议从FileInputStream块中的初始块(例如,4k)读取字节并将它们提供给MessageDigestfor update.那只会执行第1步和第7步.
InputStream is = new FileInputStream(fileName);
byte[] buffer = new byte[4096];
while (true) {
int read = is.read(buffer);
if (read < 0) {
break;
}
md.update(buffer, 0, read);
}
is.close(); // better be done in finally
Run Code Online (Sandbox Code Playgroud)
至于sha1性能,这里是我得到的time sha1sum <file>文件是179Mb:
real 0m0.607s
user 0m0.588s
sys 0m0.016s
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
240 次 |
| 最近记录: |