javascript - nodejs同步逐行读取大文件?

标签 javascript node.js filesystems mojibake

我有一个大文件 (utf8)。我知道 fs.createReadStream 可以创建流来读取大文件,但不同步。所以我尝试使用 fs.readSync,但读取的文本像 "迈�" 一样被破坏。

var fs = require('fs');
var util = require('util');
var textPath = __dirname + '/people-daily.txt';   
var fd = fs.openSync(textPath, "r");
var text = fs.readSync(fd, 4, 0, "utf8");
console.log(util.inspect(text, true, null));

最佳答案

对于大文件,readFileSync 可能不方便,因为它将整个文件加载到内存中。一种不同的同步方法是迭代调用 readSync,一次读取少量数据,并在出现的行时对其进行处理。以下代码实现了这种方法,并从文件“test.txt”中一次同步处理一行:

var fs = require('fs');
var filename = 'test.txt'

var fd = fs.openSync(filename, 'r');
var bufferSize = 1024;
var buffer = new Buffer(bufferSize);

var leftOver = '';
var read, line, idxStart, idx;
while ((read = fs.readSync(fd, buffer, 0, bufferSize, null)) !== 0) {
  leftOver += buffer.toString('utf8', 0, read);
  idxStart = 0
  while ((idx = leftOver.indexOf("\n", idxStart)) !== -1) {
    line = leftOver.substring(idxStart, idx);
    console.log("one line read: " + line);
    idxStart = idx + 1;
  }
  leftOver = leftOver.substring(idxStart);
}

关于javascript - nodejs同步逐行读取大文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7545147/

相关文章:

c# - 为在 C# 中也有 Javascript 的站点获取 HTTP

javascript - php设置下拉菜单和单选按钮的值以及从数据库获取的数据

javascript - 使用nodejs中的csv-parse模块忽略引号内的内容

android - 检查文件夹是否为空(内部存储)

windows - 自定义预取

linux - 保护文件不被更改

javascript - 当创建和销毁都是 AJAX 时,在 DOM 中找不到 ID

javascript - 在不改变其他 li 位置的情况下调整 li 的大小

node.js - TFS(内部)构建输出显示错误的字符编码

javascript - NodeJS Websockets - 发送数据后终止套接字