在前面的问题中,似乎从 node.js 中的文件进行随机访问读取的唯一方法是使用fs.createReadStream()
其可选fd
的start
、 和end
字段。
这在我最简单的测试中运行良好。但在我的项目中,我需要反复读取二进制文件的不同偏移量。这以一种奇怪的方式失败了,所以我想出了一个最小的测试用例:
var fs = require('fs');
fs.open('test.txt', 'r', function (err, fd) {
if (err) {
console.error('error opening file: ' + err);
} else {
fs.createReadStream(null, {fd: fd, start: 2, end: 5}).on('error', function (err) {
throw e;
}).on('close', function () {
console.log('outer close');
}).on('data', function (data) {
console.log('outer data', data);
}).on('end', function () {
console.log('outer end');
fs.createReadStream(null, {fd: fd, start: 0, end: 3}).on('error', function (err) {
throw e;
}).on('close', function () {
console.log('inner close');
}).on('data', function (data) {
console.log('inner data', data);
}).on('end', function () {
console.log('inner end');
// more code to execute after both reads
});
});
}
});
end
永远不会收到内部事件。(外部close
接收不一致,但我不需要附加代码。)
我之前在 Perl 甚至在 JavaScript 中作为 Firefox 扩展实现了这个项目,但在 node.js 下它被证明是困难的。这也是对我是否可以开始使用 node.js 作为通用脚本语言的测试。