本篇文章给大家分享一个Node.js 缓冲区的完整指南,聊聊一些Node 缓冲区(Buffer)模块的重要方法,希望对大家有所帮助!
二进制流是大量的二进制数据的集合。由于通常情况下二进制流的大小挺大的,因此二进制流一般不会一起运送,而会在运输前切分成小块然后逐一发送。
当数据处理单元暂时不再接收其他数据流时,剩余的数据将会被保留在缓存中,直到数据处理单元准备好接收更多数据为止。
Node.js 服务器一般需要在文件系统中进行读写,而文件在存储层面而言其实都是二进制流。除此之外,Node.js 还能与 TCP 流一起使用,让 TCP 流在不可靠的互联网络上提供可靠的端到端字节流保障通信。
发送给接收者的数据流会被缓冲,直到接收者准备接收更多要处理的数据为止。这就是 Node.js 处理临时数据部分的工作内容 —— 在 V8 引擎外部管理和存储二进制数据。
让我们一起深入缓冲区(Buffer
)的各种使用方法,了解更多有关它们的信息以及一起学习如何在 Node.js 程序中使用它们吧。
Node.js Buffer 的方法
Node.js 缓冲模块的最大优势,其实就是它是内置于 Node.js 中的,因此我们可以在任何我们想要使用它的地方使用它。
让我们一起浏览一些重要的 Node.js 缓冲模块的方法吧。
Buffer.alloc()
此方法将创建一个新的缓冲区,但是分配的大小不是固定的。当我们调用此方法时,可以自行分配大小(以字节为单位)。
const buf = Buffer.alloc(6) // 这会创建一个 6 字节的缓冲区 console.log(buf) // <Buffer 00 00 00 00 00 00>
Buffer.byteLength()
如果我们想要获取缓冲区的长度,我们只需调用 Buffer.byteLength()
就行了。
var buf = Buffer.alloc(10) var buffLen = Buffer.byteLength(buf) // 检查缓冲区长度 console.log(buffLen) // 10
Buffer.compare()
通过使用 Buffer.compare()
我们可以比较两个缓冲区,此方法的返回值是 -1
,0
,1
中的一个。
译者注:buf.compare(otherBuffer);
这一句调用会返回一个数字 -1
,0
,1
,分别对应 buf
在 otherBuffer
之前,之后或相同。
var buf1 = Buffer.from('Harsh') var buf2 = Buffer.from('Harsg') var a = Buffer.compare(buf1, buf2) console.log(a) // 这会打印 0 var buf1 = Buffer.from('a') var buf2 = Buffer.from('b') var a = Buffer.compare(buf1, buf2) console.log(a) // 这会打印 -1 var buf1 = Buffer.from('b') var buf2 = Buffer.from('a') var a = Buffer.compare(buf1, buf2) console.log(a) // 这会打印 1
Buffer.concat()
顾名思义,我们可以使用此函数连接两个缓冲区。当然,就像字符串一样,我们也可以连接两个以上的缓冲区。
var buffer1 = Buffer.from('x') var buffer2 = Buffer.from('y') var buffer3 = Buffer.from('z') var arr = [buffer1, buffer2, buffer3] console.log(arr) /* buffer, !concat [ <Buffer 78>, <Buffer 79>, <Buffer 7a> ] */ // 通过 Buffer.concat 方法连接两个缓冲区 var buf = Buffer.concat(arr) console.log(buf) // <Buffer 78 79 7a> concat successful
Buffer.entries()
Buffer.entries()
会用这一缓冲区的内容创建并返回一个 [index, byte] 形式的迭代器。
var buf = Buffer.from('xyz') for (a of buf.entries()) { console.log(a) /* 这个会在控制台输出一个有缓冲区位置与内容的字节的数组 [ 0, 120 ][ 1, 121 ][ 2, 122 ] */ }
Buffer.fill()
我们可以使用 Buffer.fill()
这个函数将数据插入或填充到缓冲区中。更多信息请参见下文。
const b = Buffer.alloc(10).fill('a') console.log(b.toString()) // aaaaaaaaaa
Buffer.includes()
像字符串一样,它将确认缓冲区是否具有该值。我们可以使用 Buffer.includes()
方法来实现这一点,给定方法根据搜索返回一个布尔值,即 true
或 false
。
const buf = Buffer.from('this is a buffer') console.log(buf.includes('this')) // true console.log(buf.includes(Buffer.from('a buffer example'))) // false
Buffer.isEncoding()
我们可能知道二进制文件必须进行编码,那么如果我们要检查数据类型是否支持字符编码该怎么办呢?我们可以使用 Buffer.isEncoding()
方法进行确认。如果支持,它将返回 true
。
console.log(Buffer.isEncoding('hex')) // true console.log(Buffer.isEncoding('utf-8')) // true console.log(Buffer.isEncoding('utf/8')) // false console.log(Buffer.isEncoding('hey')) // false
Buffer.slice()
buf.slice()
将用于使用缓冲区的选定元素创建一个新缓冲区 —— 对缓冲区进行切割时,将创建一个新缓冲区,其中包含要在新缓冲区切片中找到的项目的列表。
var a = Buffer.from('uvwxyz'); var b = a.slice(2, 5); console.log(b.toString()); // wxy
Buffer.swapX()
Buffer.swapX()
用于交换缓冲区的字节顺序。使用 Buffer.swapX()
(此处 X
可以为 16, 32, 64)来交换 16 位,32 位和 64 位缓冲区对象的字节顺序。
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]) console.log(buf1) // <Buffer 01 02 03 04 05 06 07 08> // 交换 16 位字节顺序 buf1.swap16() console.log(buf1) // <Buffer 02 01 04 03 06 05 08 07> // 交换 32 位字节顺序 buf1.swap32() console.log(buf1) // <Buffer 03 04 01 02 07 08 05 06> // 交换 64 位字节顺序 buf1.swap64() console.log(buf1) // <Buffer 06 05 08 07 02 01 04 03>
Buffer.json()
它可以帮助我们从缓冲区创建 JSON 对象,而该方法将返回 JSON 缓冲区对象,
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); console.log(buf.toJSON()); // {"type":"Buffer", data:[1, 2, 3, 4, 5, 6, 7, 8]}
结论
如果我们需要进一步了解并使用 Node.js 的缓冲区,我们需要对缓冲区以及 Node.js 缓冲区的工作原理有更扎实的基础知识。我们还应该了解为什么我们需要使用 Node.js 缓冲区和各种 Node.js 缓冲区方法的使用。
更多node相关知识,请访问:nodejs 教程!!
以上是聊聊一些Node.js 缓冲区(Buffer)模块的重要方法的详细内容。更多信息请关注PHP中文网其他相关文章!

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr

Node.js擅长于高效I/O,这在很大程度上要归功于流。 流媒体汇总处理数据,避免内存过载 - 大型文件,网络任务和实时应用程序的理想。将流与打字稿的类型安全结合起来创建POWE

Python和JavaScript在性能和效率方面的差异主要体现在:1)Python作为解释型语言,运行速度较慢,但开发效率高,适合快速原型开发;2)JavaScript在浏览器中受限于单线程,但在Node.js中可利用多线程和异步I/O提升性能,两者在实际项目中各有优势。

JavaScript起源于1995年,由布兰登·艾克创造,实现语言为C语言。1.C语言为JavaScript提供了高性能和系统级编程能力。2.JavaScript的内存管理和性能优化依赖于C语言。3.C语言的跨平台特性帮助JavaScript在不同操作系统上高效运行。

JavaScript在浏览器和Node.js环境中运行,依赖JavaScript引擎解析和执行代码。1)解析阶段生成抽象语法树(AST);2)编译阶段将AST转换为字节码或机器码;3)执行阶段执行编译后的代码。

Python和JavaScript的未来趋势包括:1.Python将巩固在科学计算和AI领域的地位,2.JavaScript将推动Web技术发展,3.跨平台开发将成为热门,4.性能优化将是重点。两者都将继续在各自领域扩展应用场景,并在性能上有更多突破。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

WebStorm Mac版
好用的JavaScript开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。