javascript - 文件读取和流式传输有什么区别?

标签 javascript node.js web server-side

我在某本书中读到使用流式处理比在 node.js 中一次读取整个文件更好,我理解这个想法..但我想知道文件读取不是使用流式处理,我已经习惯了 Java 和 C++,当我想读取一个文件时,我使用流 .. 那么这里有什么区别?? fs.createReadStream(<somefile>); 之间有什么区别?和 fs.readFile(<somefile>); 两者都是异步的,对吧!!

最佳答案

首先,fileread 是完全缓冲的方法。流式传输是部分缓冲方法。

现在这是什么意思?

完全缓冲的函数调用,如 readFileSync() 和 readFile() 公开 数据作为一个大 Blob 。也就是说,执行读取,然后以同步或异步方式返回完整的数据集。 使用这些完全缓冲的方法,我们必须等到所有数据都被读取,并且 Node 内部将需要分配足够的内存来将所有数据存储在内存中。这可能会有问题 - 想象一个从磁盘读取 1 GB 文件的应用程序。如果只有完全缓冲的访问,我们将需要使用 1 GB 的内存来存储文件的全部内容以供读取 - 因为 readFile 和 readFileSync 都会返回一个包含所有数据的字符串。

部分缓冲的访问方式不同。它们不将数据输入视为离散事件,而是将其视为在读取或写入数据时发生的一系列事件。它们允许我们在从磁盘/网络/其他 I/O 读取数据时访问数据。

Streams 返回较小的数据部分(使用缓冲区),并在有新数据可供处理时触发回调。

流是事件发射器。例如,如果我们的 1 GB 文件需要以某种方式处理一次,我们可以使用流并在读取数据后立即处理数据。这很有用,因为我们不需要将内存中的所有数据都保存在某个缓冲区中:处理后,对于此类应用程序,我们不再需要将数据保存在内存中。

Node 流接口(interface)由两部分组成:可读流和可写流。有些流是可读可写的。

关于javascript - 文件读取和流式传输有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38459334/

相关文章:

javascript - 等待内部的等待不会给出正确的输出

javascript - Express.js : Interesting result

javascript - 如何在 Matter.js 中使用 SVG 图像?

node.js - 替换 PHP,并异步连接到它

node.js - backbone model.save() 不使用主体解析器设置 Express 服务器的响应主体

javascript - 在jquery中自动隐藏提交按钮

javascript - 我可以在 mongoDB 中根据填充条件查找文档吗?

java - 接管申请时要做的事情

python - Python-3 中的 Long 类型,NameError : name 'long' is not defined

java - 使用网络处理控制 arduino (javascript)