Я загружаю файл (~ 300 МБ) с помощью Alamofire. После загрузки и сохранения мне нужно вычислить и сравнить SHA1 из этого файла, поэтому я делаю так:
let data = Data(contentsOf: url)
let sha1 = data.sha1
Это порождает проблему. Все байты копируются в оперативную память. Как я могу этого избежать?
функция для расчета:
extension Data {
func sha1() -> String {
var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
self.withUnsafeBytes {
_ = CC_SHA1($0, CC_LONG(self.count), &digest)
}
let hexBytes = digest.map { String(format: "%02hhx", $0) }
return hexBytes.joined()
}
}