我正在尝试使用Node.js
将文件读取到内存,并收到offset
的超出范围的错误,尽管它在所需范围内。有什么想法我要在这里出错吗?
代码段:
let offset = 0;
let length = 1024;
let position = 0;
let hex : Array<BinaryData> = [];
let fd = fs.openSync(filepath, 'r+');
//For each 1024 bytes
for (let j = 0; j < fileSize / length; j++) {
//Refresh the buffer and output for each iteration
let buffer = new Int8Array(length);
let output: number[] = [];
//Read 1024 bytes
let bytesRead = fs.readSync(fd, buffer, offset, length, position);
//Update offset and position for next iteration
offset += bytesRead;
position += bytesRead;
//Convert to number[]
for (var x in buffer) {
output.push(Number.parseInt(x));
}
//Push to BinaryData array
hex.push(new BinaryData(output));
}
fs.closeSync(fd);
收到的错误:
拒绝的承诺在1秒钟内未处理:RangeError [ERR_OUT_OF_RANGE]:“偏移”的值超出范围。它必须是> = 0 && <=1024。已接收1024 extensionHostProcess.js:775 堆栈跟踪:RangeError [ERR_OUT_OF_RANGE]:“偏移”的值超出范围。必须为> = 0 && <=1024。已接收1024
1024显然在>=0 && <= 1024
的范围内,所以我不确定我的错误在哪里。任何帮助表示赞赏!
答案 0 :(得分:1)
如果您试图一遍又一遍地将1024个字节读入同一缓冲区,则不要前进offset
,因为这是开始读入缓冲区的位置。 position
是从文件读取的位置。表示您的进度正确。
因此,如果您每次只想读取缓冲区的开头,则offset
应该停留在0
。
我怀疑错误是因为您正在前进offset
从而使fs.readSync()
越过缓冲区的末端而超出了缓冲区的大小,从而导致RangeError。