我知道git速度很快,但我最近才發現它的速度有多快。Git如何快速計算SHA散列?
在我的其中一個項目中,我試圖計算一個巨大文件(82 MB和850k行)的SHA-256散列,並花了一分鐘計算它(包括散列和其他一些小操作) 。
即使使用SHA-1,它花了我30多秒,而git似乎在短短一兩秒內完成。
我正在使用java的Security
API來計算Scala中的散列,結合文件的所有行。
val lines = Source.fromFile(filePath, "UTF-8").getLines().toList
MessageDigest.getInstance("SHA-256")
.digest(lines.mkString("\n").getBytes).map("%02x".format(_)).mkString
那麼,Git如何做到這麼快,或者說更重要的問題,爲什麼我的方法如此之慢?
編輯:對於那些不熟悉斯卡拉語法,lines
將文件的所有行的List
和mkString
方法返回列表中與給定的分離器結合所有元素的字符串。
您是否檢查過Git的源代碼?那將是開始的地方。 –
@JimGarrison,我試圖尋找它,但我沒有找到實際做哈希的確切代碼。另外我對C代碼不是很熟悉,我不認爲我能夠理解它。 –
解析,把它放到一個數據結構(列表)中,合併,再次獲取字節......很多額外的工作。你不是試圖直接從你的'InputStream'(4k塊)讀取字節,並將它們送到MessageDigest實例進行更新嗎?這可能會更快。 –