Javascript 读取txt文件时获取错误文件太大

Javascript 读取txt文件时获取错误文件太大,javascript,node.js,Javascript,Node.js,它适用于小文件,但对于大文件,它会显示: let text = fs.readFileSync("12.txt").toString('utf-8');; let textByLine = text.split("\n") let arrayForUse = textByLine.map(line => line.split(' ').filter(elementOfArray => elementOfArray !== '')); let

它适用于小文件,但对于大文件,它会显示:

let text = fs.readFileSync("12.txt").toString('utf-8');;
let textByLine = text.split("\n")
let arrayForUse = textByLine.map(line => line.split(' ').filter(elementOfArray => elementOfArray !== ''));

let finalArray = []

arrayForUse.forEach(compareElement => {
  let sameItems = [];
  for(element of arrayForUse) {
    if(compareElement[0] === element[0] && compareElement[1] === element[1] && compareElement[2] !== element[2]) {
      sameItems.push(compareElement[2]);
      sameItems.push(element[2]);
    }
  }
  finalArray.push(sameItems);
})

let unique = finalArray
  .filter(element => element.length !== 0)
  .map(item => [...new Set(item)].join('='));

console.log([...new Set(unique)]);```
RangeError[ERR_FS_FILE_TOO_LARGE]:文件大小(2259809293)大于可能的缓冲区:2147483647字节

我需要打开并读取文本文件。我的代码是:

let text = fs.readFileSync("12.txt").toString('utf-8');;
let textByLine = text.split("\n")
let arrayForUse = textByLine.map(line => line.split(' ').filter(elementOfArray => elementOfArray !== ''));

let finalArray = []

arrayForUse.forEach(compareElement => {
  let sameItems = [];
  for(element of arrayForUse) {
    if(compareElement[0] === element[0] && compareElement[1] === element[1] && compareElement[2] !== element[2]) {
      sameItems.push(compareElement[2]);
      sameItems.push(element[2]);
    }
  }
  finalArray.push(sameItems);
})

let unique = finalArray
  .filter(element => element.length !== 0)
  .map(item => [...new Set(item)].join('='));

console.log([...new Set(unique)]);```

不能对大文件使用
readFileSync
。它会将文件读入内存,并且您的文件大于允许的最大内存缓冲区大小

由于您只是通过换行符等将其拆分,因此可以在文件流上使用
readline
模块,如中所述,或者(可以说比
readline
更适合这里)。

对于如此大的文件,O(n^2)循环可能也会很痛苦,即使您设法将其读入内存中。。。