Node.js FS-偏移量超出范围,但也在范围内吗?

时间:2019-09-09 04:57:58

标签: node.js typescript

我正在尝试使用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的范围内,所以我不确定我的错误在哪里。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

如果您试图一遍又一遍地将1024个字节读入同一缓冲区,则不要前进offset,因为这是开始读入缓冲区的位置。 position是从文件读取的位置。表示您的进度正确。

因此,如果您每次只想读取缓冲区的开头,则offset应该停留在0

我怀疑错误是因为您正在前进offset从而使fs.readSync()越过缓冲区的末端而超出了缓冲区的大小,从而导致RangeError。