如何使用Bun实现100GB+大文件的逐行读取?
在Bun中实现大文件(100GB+)的逐行读取
Bun提供了两种可行方案实现大文件逐行读取,既可以兼容Node.js现有代码,也能通过原生API获得更优性能:
方案一:使用Bun原生Stream API(推荐)
借助Bun.file()创建可读流,配合TransformStream拆分每行数据,适合追求原生性能的场景:
const file = Bun.file("input.txt", { encoding: "utf16le" }); const stream = file.stream(); // 自定义转换流,拆分每行内容 const lineSplitter = new TransformStream({ remaining: "", transform(chunk, controller) { this.remaining += chunk; const lines = this.remaining.split("\n"); this.remaining = lines.pop() || ""; lines.forEach(line => controller.enqueue(line)); }, flush(controller) { if (this.remaining) controller.enqueue(this.remaining); } }); // 处理每行数据 await stream.pipeThrough(lineSplitter).pipeTo(new WritableStream({ write(line) { // 替换为你的行处理逻辑 console.log("处理行:", line); } }));
方案二:兼容Node.js的readline模块
Bun完全支持Node.js的fs和readline模块,可直接复用原有Node.js代码,几乎无需修改:
// ES模块导入方式 import readline from "readline"; import fs from "fs"; // 或CommonJS导入方式 // const readline = require("readline"); // const fs = require("fs"); const input = fs.createReadStream("file.txt", { encoding: "utf16le", }); const rl = readline.createInterface({ input }); rl.on("line", (line) => { // 替换为你的行处理逻辑 console.log("处理行:", line); }); rl.on("close", () => { console.log("文件读取完成"); });
内容的提问来源于stack exchange,提问作者Sarkar
相关产品推荐
相关产品推荐

