当前位置: 首页 > 面试题库 >

使用Node.js编写大文件

陶文林
2023-03-14
问题内容

我正在使用可写流使用node.js编写一个大文件:

var fs     = require('fs');
var stream = fs.createWriteStream('someFile.txt', { flags : 'w' });

var lines;
while (lines = getLines()) {
    for (var i = 0; i < lines.length; i++) {
        stream.write( lines[i] );
    }
}

我想知道这种方案在不使用drain事件的情况下是否安全?如果不是(我认为是这种情况),那么将任意大数据写入文件的模式是什么?


问题答案:

这就是我最终做到的方式。背后的想法是创建实现ReadStream接口的可读流,然后使用pipe()方法将数据通过管道传输到可写流。

var fs = require('fs');
var writeStream = fs.createWriteStream('someFile.txt', { flags : 'w' });
var readStream = new MyReadStream();

readStream.pipe(writeStream);
writeStream.on('close', function () {
    console.log('All done!');
});

MyReadStream可以从猫鼬QueryStream中获取类的示例。



 类似资料:
  • 我正在使用vertx websocket。我正在通过它发送一个大文件。使用文件系统的最佳方式是什么?如果多个帧到达同一个文件,异步文件系统可能无法正常工作。有什么建议吗?

  • 我可以刷新编写器并再次使用相同的编写器向文件中追加更多的xml,如下所示:

  • 问题内容: 我尝试使用以下代码来加密1 GB的文件。但是Node.js中止,并显示“致命错误:JS分配失败-进程内存不足”。我该如何处理? 问题答案: 您可以将加密的文件写回到磁盘,而不是将整个内容缓存在内存中:

  • 问题内容: 我尝试使用具有96GB RAM的服务器上的 fs.readFileSync 将大文件( 〜6Gb )加载到内存中。 问题是它失败并显示以下错误消息 RangeError:尝试分配大于最大大小的缓冲区:0x3fffffff字节 不幸的是,我没有发现增加Buffer的可能性,这似乎是一个常数。 如何克服此问题并使用Node.js加载大文件? 谢谢! 问题答案: 来自一个快乐的常见问题解答:

  • 本文向大家介绍Docker使用编写dockerfile启动node.js应用,包括了Docker使用编写dockerfile启动node.js应用的使用技巧和注意事项,需要的朋友参考一下 编写 Dockerfile 以 express 自动创建的目录为例,目录结构如下: 在项目目录下新建 Dockerfile 文件 FROM 指定基础镜像为 node 的 10.15 版本(node 官方版本可在此

  • 应用程序开发人员使用composer-clientnpm模块以编程方式连接到已部署的业务网络,创建、读取、更新、删除资产和参与者,以及提交交易。如果应用程序需要能够部署或管理业务网络,则可以使用composer-adminnpm模块。 示例landregistry.js文件包含一个代表土地注册的类,并包含列出土地权证、添加默认权证和提交交易的方法。这已经使用JavaScript类实现了; 然而,你