Node.JS 中 Buffer 和 Stream 的区别

Node.JS 中 Buffer 和 Stream 的区别

缓冲区和流

今天我将讨论缓冲区和流。当我开始使用 Node.JS 时,我很难掌握这些概念,所以我分享了围绕这些概念的学习,以帮助开发人员。

首先,让我用简单的术语解释什么是缓冲和流。

缓冲只是当我们播放视频时收集数据的动作。

流是从服务器向客户端发送数据。

首先,我们将讨论缓冲区。

缓冲区

当我们在 Node.JS 中读取文件时,它会分配与文件大小相等的内存,并将其存储在内存中。我们称这个内存空间为缓冲区。

如上例所示,Buffer.from() 用于将字符串、数组、缓冲区或 arrayBuffer 的值转换为缓冲区,toString() 用于将其转换回字符串。

我想强调缓冲区的一个主要问题。

- 如果在你的应用程序中,用户正在上传巨大的文件,如 50MB 或更多,那么服务器将很快过载,因为 50MB 的文件需要 50MB 的内存缓冲区。想象一下,如果 100 个用户同时上传,那么它将消耗 100 * 50 = 5000MB 内存。

- 在可以执行任何操作之前,用户必须等待整个数据加载到内存中

为了说明这一点,我将创建一个文件 test.txt,然后使用 createReadStream() 读取该文件。

1. 使用以下内容创建一个 test.txt 文件。

2. 该文件的大小为 29 字节

3. 在下面的代码中,我使用 createReadStream 来读取数据,其中有一个 highWaterMark 选项。该选项指定块缓冲区的大小。如您所见,数据正在分两块读取,然后在结束事件中打印出来。

使用流,我们可以逐块处理数据,不需要将整个数据保存在内存中。这就是为什么当我们需要处理大量数据时,推荐使用流。

希望现在您会对 Node.JS 中的 Buffer 和 Stream 有更好的理解。如果你喜欢这篇文章,请点赞和订阅。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416480.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

个人实现的QT拼图游戏(开源),QT拖拽事件详解

文章目录 效果图引言玩法 拖拽概念基本概念如何在Qt中使用拖放注意事项 游戏关键问题总结 效果图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c6dd66befd314442adf07e1dec0d550c.png 引言 在学习QT demo时,发现有一个拼图demo,介绍拖…

ChatGPT付费创作系统V2.6.2独立版+前端

1、在宝塔新建个站点,php版本使用 7.4,把压缩包上传到站点根目录,运行目录设置为/public 2、导入根目录下数据库文件 3、修改数据库连接配置,后台配置文件是/.env 4、超管后台地址:http://域名/super 初始账号密码&…

蓝桥杯-最少刷题数

📑前言 本文主要是【算法】——最少刷题数的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句&#x…

仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】

文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫本文内容是我为复试准备的第二个项目 💫欢迎…

Electron Apple SignIn 登录

本人写博客,向来主张:代码要完整,代码可运行,文中不留下任何疑惑。 最讨厌写博客,代码只留下片段,文中关键的东西没写清楚。之前看了那么多文章,就是不告诉我clientId从哪来的。 官方资料地址&…

R.swift SwiftGen 资源使用指南

R.swift 和 SwiftGen 资源转换使用指南 R.swift (原始代码会打包到项目?) Pod platform :ios, 12.0 target LBtest do# Comment the next line if you dont want to use dynamic frameworksuse_frameworks!pod R.swift # pod SwiftGen, ~&g…

go中如何进行单元测试案例

一. 基础介绍 1. 创建测试文件 测试文件通常与要测试的代码文件位于同一个包中。测试文件的名称应该以 _test.go 结尾。例如,如果你要测试的文件是 math.go,那么测试文件可以命名为 math_test.go。 2. 编写测试函数 测试函数必须导入 testing 包。每…

HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

自定义组件的生命周期 允许在生命周期函数中使用 Promise 和异步回调函数,比如网络资源获取,定时器设置等; 页面生命周期 即被Entry 装饰的组件生命周期,提供以下生命周期接口: onPageShow 页面加载时触发&#xff…

Postman基本使用、测试环境(Environment)配置

文章目录 准备测试项目DemoController测试代码Interceptor模拟拦截配置 Postman模块简单介绍Postman通用环境配置新建环境(Environment)配置环境(Environment)设置域名变量引用域名变量查看请求结果打印 Postman脚本设置变量登录成功后设置全局Auth-Token脚本编写脚本查看conso…

2种数控棋

目录 数控棋1 数控棋2 数控棋1 棋盘: 初始局面: 规则: 规则:双方轮流走棋,可走横格、竖格、可横竖转弯,不可走斜格。每一步均须按棋所在格的数字走步数,不可多不可少。 先无法走棋的一方为…

分布式ID(2):雪花算法生成ID

1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L&l…

Android Studio安卓开发--ListView学习整理

ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。 1.ListView的简单用法 (1)activity_main.xml布局中加入ListView控件:(先占满整个布局的空间)…