我正在尝试一次读取一个大文件的一行。我在Quora上找到了一个问题,其中涉及这个主题,但我缺少一些联系来使整个过程完美地契合在一起。
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
我想要弄清楚的是如何从文件中一次读取一行,而不是像这个示例中从标准输入读取。
我尝试过:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
但它没有起作用。 我知道在紧急情况下我可以退回使用类似PHP的东西,但我想搞清楚这个问题。
我认为其他答案行不通,因为文件比我正在运行的服务器具有更多的内存。
fs.readSync()
会发现处理起来非常困难。你可以将二进制八位字节读入缓冲区,但是在将其转化为 JavaScript 字符串并扫描 EOLs(行结束符)之前,没有简单的方法来处理部分 UTF-8 或 UTF-16 字符。Buffer()
类型没有如本地字符串一样丰富的函数集来操作其实例,但是本地字符串无法包含二进制数据。在我看来,缺少从任意文件句柄读取文本行的内置方式是 node.js 中的一个真正差距。 - hippietrailif (line.length==1 && line[0] == 48) special(line);
,以处理这种情况。 - Thabonode
的 API 文档中略有修改,详情请见 https://github.com/nodejs/node/pull/4609。 - eljefedelrodeodeljefe