杭州职工业能力建设网站国内最专业的设计网站建设

news/2025/9/24 9:05:30/文章来源:
杭州职工业能力建设网站,国内最专业的设计网站建设,北京seo全网营销,规划建立一个网站Node.js中的Buffer和Stream 计算机只能理解二进制数据#xff0c;即0和1形式的数据。这些数据的顺序移动称为流。以称为块#xff08;chunk#xff09;的破碎部分流式传输数据#xff1b;计算机一收到数据块就开始处理数据#xff0c;而不用等待整个数据。 我们这篇文章…Node.js中的Buffer和Stream 计算机只能理解二进制数据即0和1形式的数据。这些数据的顺序移动称为流。以称为块chunk的破碎部分流式传输数据计算机一收到数据块就开始处理数据而不用等待整个数据。 我们这篇文章就将讲解一下Stream和Buffer。有时处理速度小于接收块的速率或快于接收块的速率在这两种情况下都需要保存块因为处理需要最少量的块这是使用chunk完成的。 Buffer Buffer是一种抽象允许我们处理 Node.js 中的原始二进制数据。它们在处理文件和网络或一般 I/O 时特别有用。 缓冲区代表分配给我们计算机的一块内存。缓冲区的大小一旦设置就无法更改。缓冲区用于存储字节。 让我们用一些数据创建一些缓冲区 // buffer-data.js// 创建一些缓冲区 const bufferFromString Buffer.from(Ciao human) const bufferFromByteArray Buffer.from([67, 105, 97, 111, 32, 104, 117, 109, 97, 110]) const bufferFromHex Buffer.from(4369616f2068756d616e, hex) const bufferFromBase64 Buffer.from(Q2lhbyBodW1hbg, base64)// 数据以二进制格式存储 console.log(bufferFromString) // Buffer 43 69 61 6f 20 68 75 6d 61 6e console.log(bufferFromByteArray) // Buffer 43 69 61 6f 20 68 75 6d 61 6e console.log(bufferFromHex) // Buffer 43 69 61 6f 20 68 75 6d 61 6e console.log(bufferFromBase64) // Buffer 43 69 61 6f 20 68 75 6d 61 6e// 原始缓冲区数据可以“可视化”为字符串、十六进制或 base64 console.log(bufferFromString.toString(utf-8)) // Ciao human (默认utf-8) console.log(bufferFromString.toString(hex)) // 4369616f2068756d616e console.log(bufferFromString.toString(base64)) // Q2lhbyBodW1hbg// 获取buffer的长度 console.log(bufferFromString.length) // 10现在让我们创建一个 Node.js 脚本使用缓冲区将文件从一个位置复制到另一个位置 // buffer-copy.jsimport {readFile,writeFile } from fs/promisesasync function copyFile (src, dest) {// 读取整个文件内容const content await readFile(src)// 将该内容写入其他地方return writeFile(dest, content) }// src 是来自 cli 的第一个参数dest 是第二个 const [src, dest] process.argv// 开始复制并处理结果 copyFile(src, dest).then(() console.log(${src} copied into ${dest})).catch((err) {console.error(err)process.exit(1)})可以按如下方式使用此脚本 node ./buffer-copy.js source-file dest-file但是我们有没有想过当尝试复制大文件比如说 3Gb时会发生什么 发生的情况是我们会看到脚本严重失败并出现以下错误 RangeError [ERR_FS_FILE_TOO_LARGE]: File size (3221225472) is greater than 2 GBat readFileHandle (internal/fs/promises.js:273:11)at async copyFile (file:///...//buffer-copy.js:8:19) {code: ERR_FS_FILE_TOO_LARGE }为什么会发生这种情况 本质上是因为当我们使用fs.readFile时我们使用Buffer对象从内存中的文件加载所有二进制内容。根据设计缓冲区在内存中的大小受到限制。 可以使用以下代码创建具有最大允许大小的缓冲区 // biggest-buffer.jsimport buffer from buffer// 这将分配几 GB 内存 const biggestBuffer Buffer.alloc(buffer.constants.MAX_LENGTH) // 创建一个具有最大可能大小的缓冲区 console.log(biggestBuffer) // Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 4294967245 more bytes在某种程度上我们可以将流视为一种抽象它允许我们处理在不同时刻到达的数据部分块。每个块都是一个Buffer实例。 Stream Stream是 Node.js 中处理流数据的抽象接口。Node.js中stream模块提供了用于实现流接口的 API。Node.js 提供了许多流对象。例如对 HTTP 服务器的请求和process.stdout都是流实例。 我们需要 Node.js 中的流来处理和操作流数据例如视频、大文件等。Node.js 中的 stream 模块用于管理所有流。流是一个抽象接口用于与 Node.js 中的流数据一起工作。Node.js 为我们提供了许多流对象。 例如如果我们请求HTTP 服务器和进程则两者都被视为流实例。标准输出。流可以是可读的、可写的或两者兼而有之。所有流都是EventEmitter的实例。要访问流模块要使用的语法是 const stream require(stream); 流的类型 Node.js 中有四种基本的流类型 Writable可以写入数据的流例如fs.createWriteStream()。Readable可以从中读取数据的流例如fs.createReadStream()。Duplex既是Writable又是Readable 的流例如net.Socket。TransformDuplex可以在写入和读取数据时修改或转换数据的流例如zlib.createDeflate()。 // stream-copy.jsimport {createReadStream,createWriteStream } from fsconst [,, src, dest] process.argv// 创建源流 const srcStream createReadStream(src)// 创建目标流 const destStream createWriteStream(dest)// 当源流上有数据时 // 将其写入目标流 srcStream.on(data, (chunk) destStream.write(chunk))本质上我们用createReadStream和createWriteStream替换readFile和writeFile。然后使用它们创建两个流实例srcStream和destStream。这些对象分别是一个 ReadableStream输入和一个 WritableStream输出的实例。 目前唯一需要理解的重要细节是流并不急切他们不会一次性读取所有数据。数据以块、小部分数据的形式读取。一旦块通过data事件可用我们就可以立即使用它。当源流中有新的数据块可用时我们立即将其写入目标流。这样我们就不必将所有文件内容保存在内存中。 请记住这里的实现并不是万无一失的存在一些粗糙的边缘情况但就目前而言这足以理解 Node.js 中流处理的基本原理。 可读流 → 该流用于创建用于读取的数据流例如读取大块文件。 例子 const fs require(fs);const readableStream fs.createReadStream(./article.md, {highWaterMark: 10 });readableStream.on(readable, () {process.stdout.write([${readableStream.read()}]); });readableStream.on(end, () {console.log(DONE); });可写流 → 这将创建要写入的数据流。例如向文件中写入大量数据。 例子 const fs require(fs); const file fs.createWriteStream(file.txt); for (let i 0; i 10000; i) { file.write(Hello world i); } file.end();双工流 → 该流用于创建同时可读和可写的流。 例子 const server http.createServer((req, res) {let body ;req.setEncoding(utf8);req.on(data, (chunk) {body chunk;});req.on(end, () {console.log(body);try {res.write(Hello World);res.end();} catch (er) {res.statusCode 400;return res.end(error: ${er.message});}}); });流动与非流动 Node 中有两种类型的可读流 流动流 —— 用于从系统传递数据并将该数据提供给程序的流。非流动流 —— 不自动推送数据的非流动流。相反非流动流将数据存储在缓冲区中并显式调用read方法来读取它。 内存/时间比较 让我们看看这两种实现缓冲区和流式传输在内存使用和执行时间方面的比较。 我们可以查看 Node.js 脚本在缓冲区中分配了多少数据的一种方法是调用process.memoryUsage().arrayBuffers方法。 const { pipeline } require(node:stream/promises); const fs require(node:fs); const zlib require(node:zlib);async function run() {await pipeline(fs.createReadStream(archive.tar),zlib.createGzip(),fs.createWriteStream(archive.tar.gz),);console.log(Pipeline succeeded.); }run().catch(console.error);

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

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

相关文章

网站项目流程软件wap网站

上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢。这一节创建一个简单的测试计划来使用这些元件。该计划对应的测试需求。1)测试目标网站是fnng.cnblogs.com2)测试目的是该网站在负载达到20 QPS 时的响应时间。QPS 解释QPS…

晋城网站建设开发网上注册公司流程及所需材料

在近期的全球移动开发者大会上,Unity发布了2D引擎,触控在同时发布了Cocos 3D引擎;而在差不多同时间,以安卓为主的OGEngine也发布了新版本,并宣布将支持跨平台。各大引擎频频大动作并不是巧合,这代表着移动游…

网站开发技巧桂林网站建设兼职

在Anaconda中的jupyter打开该ipynb文件,然后依次点击File—>Download as—>python(.py)

如何建设数据报表网站动态购物网站开发源代码

随着数字化时代的到来,技术不仅改变了我们的日常生活,还重新定义了商业、通信、娱乐和全球互联。在这一浪潮中,Socks5代理技术崭露头角,成为跨界电商、爬虫数据分析、企业出海和游戏体验的关键推动力。这项技术不仅在实现数字化愿…

广州网站建设的费用网站页面分类

文章目录 主要功能常用函数1. json.dumps()2. json.loads()3. json.dump()4. json.load() 自定义序列化和反序列化自定义序列化自定义反序列化 json 是 Python 标准库中的一个模块,用于处理 JSON(JavaScript Object Notation)数据格式。JSON …

在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?

当然可以!这是一个非常核心的Kubernetes问题。 简单直接的回答是:是的,Kubernetes Deployment 完全支持扩容。 但是,Deployment 的扩容 和 HPA 是两种不同层次、不同目的的扩容机制。它们不是互斥的,而是互补的,…

开源语音识别FunASR入门详解

FunASR是由阿里达摩院开发的开源语音识别工具包,本文首先简单介绍了其安装过程,然后对其几个主要功能分别进行了介绍,最后以一个实时录音并识别的小例子进行了收尾。1 前言 1.1 简介 在人工智能的浪潮中,自动语音识…

做什爱网站wordpress头像解决

在繁忙的生活中,我们总是在寻找一种简单而健康的美食享受。当Fendi Club啤酒与沙拉相遇,它们将为我们带来一场轻盈的味觉之旅。 Fendi Club啤酒,以其醇厚的口感和淡淡的麦芽香气而闻名。这款啤酒在酿造过程中采用了特别的工艺,使得…

浅谈云原生数据库

浅谈云原生数据库当企业正加速迈入 “数据即资产” 的时代,传统数据库在海量数据处理、弹性扩展与云环境适配性上的短板日益凸显。而云原生数据库作为专为云计算架构而生的新型数据管理系统,正以其底层架构的革新性,…

找一个网站做优化分析中国响应式网站建设

LAND网络渗透测试 1.进入虚拟机操作系统:BT5中的/root目录,完善该目录下的land.py文件,填写该文件当中空缺的Flag1字符串,将该字符串作为Flag值(形式:Flag1字符串)提交;(land.py脚本功能见该任务第6题) 输入flag sendp(packet) Flag:sendp(packet) 2.进入虚拟机操作…

自己制作手机网站山西建站优化

一、传统遥控器 传统无人机遥控器一般包括开关键、遥控天线等基础装置。但是会随着无人机具体的应用和功能而开发不同的按键。它的信号稳定性远超对比其他遥控,而且遥控距离也更远(一般遥控范围在100米或以上)传统遥控器对于初学者来说比较难…

做水果的网站有哪些推广软文案例

Iptables 的基本配置,首先我们可以先把原有的清空 # iptables –F# iptables –X 设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD ACCEPT 打开“回环”(自己机器可以…

苏州建站公司选苏州聚尚网络用html做音乐网站

前言: 1、为什么不适用uniapp自带的请求功能? 答:uniapp自带的请求功能,再刷新了令牌后,重新请求返回的数据无法返回给发起请求的方法。也就是说,刷新令牌后重新发起的请求和第一次发起请求的方法是割裂的。…

推广 quot 网站开发 quot外贸网站vps服务器

通过分析分布式电源对配电网的影响,以有功功率损耗、电压质量及分布式电源总容量为优化目标,基于模糊理论建立了分布式电源在配电网中选址定容的多目标优化模型,并提出了一种改进粒子群算法进行求解。在算例仿真中,基于IEEE-14标准…

产品介绍网站设计企业网站建设策划书方案范文

1.指针是什么 C语言指针是一种特殊的变量,用于存储内存地址。它可以指向其他变量或者其他数据结构,通过指针可以直接访问或修改存储在指定地址的值。指针可以帮助我们在程序中动态地分配和释放内存,以及进行复杂的数据操作。在C语言中&#…

三亚凤凰镇网站建设兼职招聘网洛阳兼职网站

usb端点轮询如果您想用Spring Integration编写一个流程来轮询HTTP端点并从http端点收集一些内容以进行进一步处理,那有点不直观。 Spring Integration提供了几种与HTTP端点集成的方式- Http出站适配器–将消息发送到http端点 Http出站网关–将消息发送到http端点…

深圳做h5网站制作电商网站建设开发

Open3D 计算点云质心和中心(18) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 质心和中心是有所区别的,点云质心可以看作每个点的坐标均值,点云中心可以看作点云所在包围盒的中心,这也是上一章坐标最值的常用方法,下面就两种方法进行实现(图例,大概就是这个意思…

AT_abc201_f [ABC201F] Insertion Sort 题解

link 题目给出了 \(1\) 到 \(n\) 的一组排列 \(x_1,x_2...x_n\),并对于第 \(i\) 个数 \(1\le i \le n\) 给出三个操作:花费 \(A_i\) 的代价,把第 \(i\) 个数移动到任意位置。 花费 \(B_i\) 的代价,把第 \(i\) 个数…

ruoyi-vue(十四)——前端框架及package.json,vite.config.js, main.js记录介绍

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

一个优秀的网站免费下载app软件安装

E1 PCM复用设备能当程控交换机用吗?这个问题在平时与用户沟通中发现,发现有不少用户认为E1 PCM复用设备可以当程控交换机使用,不仅能实现电话线远端延伸,还可以实现电话机交换功能。 其实这个观点是错误的,E1 PCM复用…