【问题标题】:Node.js Readable file stream not getting dataNode.js可读文件流未获取数据
【发布时间】:2013-08-10 05:06:07
【问题描述】:

我正在尝试创建一个可以读取单个字节的可读文件流。我正在使用下面的代码。

var rs = fs.createReadStream(file).on('open', function() {
    var buff = rs.read(8); //Read first 8 bytes
    console.log(buff);
});

鉴于该文件是至少 8 个字节的现有文件,为什么我得到“null”作为此输出?

【问题讨论】:

    标签: node.js stream


    【解决方案1】:

    Event open 表示流已经初始化,不代表可以从流中读取。您必须监听 readabledata 事件。

    var rs = fs.createReadStream(file);
    
    rs.once('readable', function() {
        var buff = rs.read(8); //Read first 8 bytes only once
        console.log(buff.toString());
    });
    

    【讨论】:

    • 我不能使用你的第二种方法,rs.read(8) 总是返回 null。只有等待事件readable才能阅读。
    • @ffleandro 我已经删除了那部分。我想它不再起作用了。第一种方法是正确的阅读方式。
    【解决方案2】:

    您似乎正在呼叫this rs.read() method。但是,该方法仅在 Streams 接口中可用。在 Streams 界面中,您要查找的是 'data' 事件,而不是 'open' 事件。

    也就是说,文档实际上建议不要这样做。相反,如果你想流式传输它们,你可能应该一次处理它们:

    var rs = fs.createReadStream('test.txt');
    
    rs.on('data', function(chunk) {
        console.log(chunk);
    });
    

    如果您只想读取文件的特定部分,您可能需要查看较低级别的fs.open()fs.read()

    【讨论】:

    • 附加数据处理程序不会导致流进入流动模式吗?我可能应该指定我想在问题中使用非流动模式。
    • 是的,在尝试流式传输之前,我一直在较低级别工作。我喜欢rs.read 总是返回正确数量的字节(或 null,如果没有那么多)的确定性,而不是 fs.read,它返回的字节可能比请求的少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2017-11-30
    • 2018-01-28
    • 2015-10-27
    • 2020-03-12
    • 2019-08-12
    相关资源
    最近更新 更多