下面的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;
};
发布于 2018-06-26 08:42:39
要同步阅读,您可以使用fs.openSync()
、fs.readSync()
和fs.closeSync()
。
下面是一些常规的Javascript代码(希望您可以将其转换为TypeScript),它同步地从文件中读取一定数量的字节,并返回一个包含这些字节的buffer对象(或者在出错的情况下抛出异常):
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作为要读取的字节,如果文件中的字节数少于1024,它将一直读取到文件的末尾。返回缓冲区对象将包含读取的字节,您可以将其作为二进制访问或转换为字符串。
为了便于其他人阅读本文,我在前面的评论中提到,永远不应该在服务器环境中使用同步I/O (服务器应该始终使用异步I/O,除非是在启动时)。同步I/O可用于只做一件事的独立脚本(例如构建脚本),而不需要响应多个传入的请求。
我是否需要在EINTR或其他情况下对readSync()进行循环?
据我所知没有。
https://stackoverflow.com/questions/51032857
复制相似问题