我已经苦苦挣扎了6天,只是为了找到可以为我提供给定大文件的缓冲输出的解决方案。该文件可以是文本,二进制等。
下面的代码仅提供了小文件的缓冲输出。提供大文件会使其崩溃。
var fs = require('fs')
var stream = fs.createReadStream('big-file')
stream.on('data', function (data) {
console.log(data)
})
我也尝试使用'byline'库
var fs = require('fs')
var byline = require('byline')
var stream = fs.createReadStream('big-file')
var buffered_stream = byline.createStream(stream, { keepEmptyLines : true )
buffered_stream.on('data', function (data) {
console.log(data)
})
它提供每行的缓冲输出,但由于扩展的ASCII字符是再见字符,因此字节已损坏。
如果有人可以,请帮助我。预先感谢。
答案 0 :(得分:1)
您可以看到here流的默认highWatermark
属性等效于最大文件大小16kb。这并不意味着您应该更改其大小,而是要连接缓冲区,如下所示:
const fs = require('fs');
var stream = fs.createReadStream(BIG_FILE);
let buffers = [];;
stream.on('data', (chunk) => {
const buf = Buffer.from(chunk)
buffers.push(chunk);
})
stream.on('end', () => {
console.log(Buffer.concat(buffers));
})
答案 1 :(得分:0)
很有趣,但是第二分钟我发布了这个问题,我得到了答案。抱歉更新延迟。下面的代码输出指定文件每一行(大或小的)的缓冲区。
var fs = require('fs')
var lazy = require('lazy')
var readStream = fs.createReadStream('FILE')
new lazy(readStream)
.lines
.forEach(function(line) {
console.log(line) // Buffer
})
答案 2 :(得分:0)
此外,Node.js 10添加了对在可读流上进行异步迭代的支持。 但是异步迭代器尚不支持readline (ref)。
来自Node docs的异步迭代者的示例:
const fs = require('fs');
async function print(readable) {
readable.setEncoding('utf8');
let data = '';
for await (const k of readable) {
data += k;
}
console.log(data);
}
print(fs.createReadStream('file')).catch(console.error);