如何在没有阻塞循环的情况下读取nodejs中的大型二进制文件



我正在尝试学习事件驱动编程的一些基础知识。因此,作为一个练习,我试图编写一个程序,读取一个大的二进制文件并对其进行处理,但从不进行阻塞调用。我想出了以下办法:

var fs = require('fs');
var BUFFER_SIZE = 1024;
var path_of_file = "somefile"
fs.open(path_of_file, 'r', (error_opening_file, fd) =>
{
    if (error_opening_file)
    {
        console.log(error_opening_file.message);
        return;
    }
    var buffer = new Buffer(BUFFER_SIZE);
    fs.read(fd, buffer, 0, BUFFER_SIZE, 0, (error_reading_file, bytesRead, buffer) =>
    {
        if (error_reading_file)
        {
            console.log(error_reading_file.message);
            return;
        }
        // do something e.g. print or write to another file
    })
})

我知道我需要放一个while循环来读取完整的文件,但在上面的代码中,我只读取文件的前1024个字节,无法制定如何在不使用阻塞循环的情况下继续读取文件。我们怎么能做到呢?

请改用fs.createReadStream。这将一次又一次地调用您的回调,直到它完成读取文件,所以您不必阻止。

var fs = require('fs');
var readStream = fs.createReadStream('./test.exe');
readStream.on('data', function (chunk) {
  console.log(chunk.length);
})

相关内容

  • 没有找到相关文章

最新更新