以下Python代码段的nodejs(打字稿)等效项是什么?我已经尝试了在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;
};
答案 0 :(得分:1)
要同步阅读,您可以使用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;
}
对于您的应用程序,您可以只传递1024作为要读取的字节,如果文件中的字节数少于该字节,它将一直读取直到文件末尾。返回缓冲区对象将包含读取的字节,您可以将其作为二进制进行访问或转换为字符串。
为了使其他读者受益,我在前面的评论中提到过,同步I / O绝对不能在服务器环境中使用(服务器应该始终使用异步I / O,除非在启动时)。同步I / O可用于仅做一件事的独立脚本(例如,构建脚本),而无需响应多个传入请求。
如果需要EINTR或其他功能,是否需要在readSync()上循环?
不是我所知道的。