如何一次读取一个块的数据,同步读取?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (124)

与以下Python代码段相同的nodejs(typescript)是什么?我尝试在Python下面的相应nodejs。

请注意,我想读一次一个块(后来也就是,在这个例子中,我只是读第一个千字节),同步

另外,我不想立刻将整个文件读入虚拟内存; 我的一些输入文件(最终)太大了。

nodejs代码段始终返回null。我希望它返回一个字符串或缓冲区或沿着这些行的东西。如果文件长度> = 1024字节,我想要一个1024字符长的返回,否则我想要整个文件。

我用谷歌搜索了一两个小时,但我发现的是同时读取整个文件的东西,或者异步读取碎片。

这是Python:

def readPrefix(filename: str) -> str:
    with open(filename, 'rb') as infile:
        data = infile.read(1024)
    return data

这是nodejs尝试:

const readPrefix = (filename: string): string => {
    const readStream = fs.createReadStream(filename, { highWaterMark: 1024 });
    const data = readStream.read(1024);
    readStream.close();

    return data;
};
提问于
用户回答回答于

要同步读取,你将使用fs.openSync()fs.readSync()fs.closeSync()

这里有一些常规Javascript代码(希望你可以将它翻译成TypeScript),它同步从文件读取一定数量的字节并返回包含这些字节的缓冲区对象(或者在出现错误时抛出异常):

const fs = require('fs');

function readBytesSync(filePath, filePosition, numBytesToRead) {
    const buf = Buffer.alloc(numBytesToRead, 0);
    let fd;

    try {
        fd = fs.openSync(filePath, "r");
        fs.readSync(fd, buf, 0, numBytesToRead, filePosition);
    } finally {
        if (fd) {
            fs.closeSync(fd);
        }
    }
    return buf;
}

扫码关注云+社区

领取腾讯云代金券