4

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

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

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

4

2 回答 2

5

事件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());
});
于 2013-08-10T09:25:30.707 回答
0

看起来你正在调用这个rs.read()方法。但是,该方法仅在 Streams 接口中可用。在 Streams 界面中,您正在寻找'data'事件而不是'open'事件。

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

var rs = fs.createReadStream('test.txt');

rs.on('data', function(chunk) {
    console.log(chunk);
});

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

于 2013-08-10T05:49:22.507 回答