读取文件 (Bun.file())
Bun.file(path): BunFile
使用函数 Bun.file(path) 创建一个 BunFile 实例。BunFile 代表一个惰性加载的文件;初始化时并不会真正从磁盘读取文件。
Blob 接口,因此内容可以以多种格式读取。
file:// URL 创建。
BunFile 可以指向磁盘上不存在文件的位置。
text/plain;charset=utf-8,但可以通过向 Bun.file 传递第二个参数覆盖它。
stdin、stdout 和 stderr 作为 BunFile 实例暴露。
删除文件 (file.delete())
可以通过调用 .delete() 函数删除文件。
写入文件 (Bun.write())
Bun.write(destination, data): Promise<number>
Bun.write 是一个多功能工具,用于将各种类型的负载写入磁盘。
第一个参数是目标 destination,可以是以下任意类型:
string:文件系统上的路径。使用"path"模块进行路径操作。URL:file://描述符。BunFile:文件引用。
stringBlob(包括BunFile)ArrayBuffer或SharedArrayBufferTypedArray(如Uint8Array等)Response
查看系统调用
查看系统调用
| 输出 | 输入 | 系统调用 | 平台 |
|---|---|---|---|
| 文件 | 文件 | copy_file_range | Linux |
| 文件 | 管道 | sendfile | Linux |
| 管道 | 管道 | splice | Linux |
| 终端 | 文件 | sendfile | Linux |
| 终端 | 终端 | sendfile | Linux |
| 套接字 | 文件或管道 | sendfile(如果是 http,非 https) | Linux |
| 文件(不存在) | 文件(路径) | clonefile | macOS |
| 文件(已存在) | 文件 | fcopyfile | macOS |
| 文件 | Blob 或字符串 | write | macOS |
| 文件 | Blob 或字符串 | write | Linux |
stdout:
使用 FileSink 进行增量写入
Bun 提供了一个原生的增量写入文件 API,叫做 FileSink。从 BunFile 获取 FileSink 实例:
.write()。
.flush()。此方法返回已写入字节数。
FileSink 的 高水位线(内部缓存满)达到时,缓存也会自动刷新。可通过配置此参数来调整。
bun 进程会保持运行,直到显式调用 .end() 关闭此 FileSink。如果要取消此行为,可以调用该实例的 unref。
目录操作
Bun 对node:fs 的实现很快,目前尚未为读取目录实现 Bun 专用 API。当前应使用 node:fs 在 Bun 中处理目录。
读取目录(readdir)
在 Bun 中,使用node:fs 模块的 readdir 读取目录。
递归读取目录
使用readdir 并开启 recursive: true 递归读取目录。
创建目录(mkdir)
递归创建目录需使用node:fs 的 mkdir:
性能基准
以下是 Linux 下cat 命令的三行实现。
terminal
cat 的 2 倍。
