You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:52:32