nodejs synchronization read large file line by line?

后端 未结 5 1143
没有蜡笔的小新
没有蜡笔的小新 2021-01-02 07:54

I have a large file (utf8). I know fs.createReadStream can create stream to read a large file, but not synchronized. So i try to use fs.readSync, b

5条回答
  •  北荒
    北荒 (楼主)
    2021-01-02 08:34

    For large files, readFileSync can be inconvenient, as it loads the whole file in memory. A different synchronous approach is to iteratively call readSync, reading small bits of data at a time, and processing the lines as they come. The following bit of code implements this approach and synchronously processes one line at a time from the file '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);
    }
    

提交回复
热议问题