В предыдущем вопросе казалось, что единственный способ выполнить чтение с произвольным доступом из файла в 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 в качестве языка сценариев общего назначения.