gpt4 book ai didi

javascript - 为什么filestream函数没有结束

转载 作者:行者123 更新时间:2023-11-28 05:56:44 24 4
gpt4 key购买 nike

我编写了以下代码来创建文件的哈希值:

function hashFile(filePath){
try{
// Setup hash
var hash = crypto.createHash('sha256');
hash.setEncoding('hex');

// Setup filestream
var fileStream = fs.createReadStream(filePath);
fileStream.pipe(hash, { end: false });

fileStream.on('end', function () {
// Get the hash
hash.end();
var thisHash = String(hash.read());
});
}catch (err) {
console.log( "Error thrown : " + err );
return;
}
}

这工作得很好,直到我向它扔了一些较小的文件。当我这样做时,该功能就会挂起。 filestream.on('end') 回调永远不会发生。

我重写了它以不使用createReadStream:

function hashFile(filePath){
try{
fs.readFile(filePath, function (err, data) {

// Make the hash
var thisHash = crypto
.createHash('sha256')
.update(data, 'utf8')
.digest( 'hex');

console.log(thisHash);
});
}catch (err) {
console.log( "Error: " + err );
return;
}
}

这段代码工作得很好,除了处理几 MB 或更大的文件时速度非常慢。

我的问题是为什么第一个函数不能处理小文件?

最佳答案

所以,在整个晚上寻找答案之后,我在写完这篇文章 15 分钟后就找到了答案。在调用管道之前需要配置“end”回调:

var fileStream = fs.createReadStream(filePath);

var hash = crypto.createHash('sha256');
hash.setEncoding('hex');

fileStream.on('end', function () {
hash.end();
console.log(hash.read());
});

fileStream.pipe(hash);

关于javascript - 为什么filestream函数没有结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com