摘要:与字符编码通过指定的编码进制,可以在与普通的字符串之间转换。中文中文通常用于实例数组的排序。有点像方法合并截断为的长度,缺少的部分会用补充,是一个返回,是一个支持的字符编码返回,创建并返回一个形式的迭代器,如果与具有完全相同的字节就返回
Buffer
可以在TCP流或者文件系统操作等场景中处理二进制数据流。
Buffer实例类似于整数数组,但是Buffer大小固定、且在V8堆外分配物理内存,Buffer的大小在创建时确定,无法调整。
常用Buffer类方法注意:(以下方法Node新版本中已被废弃,不建议使用)
不建议使用的有如下:newBuffer(array)、newBuffer(arrayBuffer)、newBuffer(buffer)、newBuffer(size)、newBuffer(string)。
替代方法有如下:Buffer.from()、Buffer.alloc()、Buffer.allocUnsafe()。
Buffer.from(array)返回一个新建的包含所提供的字节数组的副本的Buffer。
let buf1 = Buffer.from([1,2,3,4]) //let buf2 = Buffer.from([[0x62, 0x75, 0x66, 0x66, 0x65, 0x72]]) // buf2.toString() // "buffer"
Buffer.from(arrayBuffer[,byteOffset[,length]])返回一个新建的与给定的ArrayBuffer共享同一内存的Buffer。
const arr = new Unit16Array(2) const buf = Buffer.from(arr.buffer) // 改动arr也会影响到buf
Buffer.from(buffer)返回一个新建的包含所提供的Buffer的内容的副本的Buffer。
let buf1 = Buffer.from("buffer") let buf2 = Buffer.from(buf1) buf1[0] = 0x61 console.log(buf1) // auffer console.log(buf2) // buffer
Buffer.from(string[,encoding])返回一个新建的包含所提供的字符串的副本的Buffer。
Buffer.alloc(size[,fill[,encoding]])返回一个指定大小的被填满的Buffer实例。这个方法会明显地比Buffer.allocUnsafe(size)慢,但可确保新创建的Buffer实例绝不会包含旧的和潜在的敏感数据。
// size: 新建的Buffer期望的长度 // fill:用来预填充新建的Buffer的值,默认:0 // encoding:如果fill是字符串,那么这个就是字符编码,默认:utf-8 const buf = Buffer.alloc(5) // const buf = Buffer.alloc(5, "a") // const buf = Buffer.alloc(11, "aGVsbG8gd29ybGQ=", "base64") // 输出: hello world
Buffer.allocUnsafe(size)与Buffer.allocUnsafeSlow(size)返回一个新建的指定size的Buffer,但它的内容必须被初始化,可以使用buf.fill(0)或完全写满。
开发者应该把所有正在使用的newBuffer()构造函数迁移到新的API上。
是什么造成了Buffer.allocUnsafe()和Buffer.allocUnsafeSlow()不安全?是因为调用这两个方法时,被分配的内存都是未被初始化的(未被0填充),虽然这样的设计使得内存的分配非常快(性能优势),但是已经分配的内存段可能包含潜在的敏感旧数据。使用通过Buffer.allocUnsafe()创建的没有被完全重写内存的Buffer,在Buffer内存可读的情况下,有可能泄露它的旧数据。
Buffer与字符编码通过指定的编码进制,可以在Buffer与普通的字符串之间转换。目前支持的ascii,utf-8,base-64,binary,hex
const buf = Buffer.from("helloworld", "ascii") buf.toString("hex") buf.toString("base64")Buffer与ES6迭代器
同样,Buffer实例可以使用迭代器for...of进行遍历,遍历器的buf.values()、buf.keys()、buf.entries()可以用于创建迭代器。
const buf = Buffer.from([1, 2, 3]) for(let b of buf){ console.log(b) // 1 2 3 }类方法
Buffer.byteLength(string[, encoding])返回一个字符串的实际字节长度。String.prototype.length是返回字符串的字符数。
注意字符数和字节长度是不同,英文字母中是相同的,但是当有中文时或者unicode编码(它是用两个字节来编码一个字符)是不同的。
"中文hello".length // 7 Buffer.byteLength("中文hello", "uft-8") // 11
Buffer.compare(buf1, buf2)通常用于Buffer实例数组的排序。(有点像sort()方法)
Buffer.concat(list[, totalLength])合并Buffer
const buf1 = Buffer.alloc(10) const buf2 = Buffer.alloc(14) const buf3 = Buffer.alloc(18) const totalLength = buf1.length + buf2.length + buf3.length // 42 const bufA = Buffer.concat([buf1, buf2, buf3], 41) // 截断为totalLength的长度,缺少的部分会用00补充 cosnole.log(buf.length) // 41
Buffer.isBuffer(obj),是一个buffer返回true
Buffer.isEncoding(encoding),是一个支持的字符编码返回true
Buffer.entries(),创建并返回一个[index, byte]形式的迭代器
cosnt buf = Buffer.from("buffer") for(let pair of buf.entries()) { console.log(pair) // [0, 98],[1, 117]... }
buf.equals(otherBuffer),如果buf与otherBuffer具有完全相同的字节就返回true
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/89228.html
摘要:回调函数将接收到一个对象。要禁止这一默认行为,选项应该指定为。一般来说,建议开发人员避免使用事件和方法,使用或事件代替。事件在写入数据出错或者使用管道出错时触发,事件发生时,回调函数仅会接收到一个参数。注意事件发生时,流并不会关闭。 Stream 流可以是可读的、可写的、或者是可读写的。所有的流都是EventEmitter的实例。 对象模式 所有使用Node.js API创建的流对象都...
摘要:核心模块学习之何为在引入之前,没有能读取和操作二进制数据流的机制,作为引入,以便能和网络流文件流等进行交互。返回值写入的实际大小,没有足够的空间保存,只会写入一部分。返回值实际存入的字节数。参考文章一进阶核心模块常用使用总结 node 核心模块学习之Buffer 何为 Buffer 在ES6引入 TypeArray 之前,JS没有能读取和操作二进制数据流的机制,Buffer 作为 No...
摘要:文档是的核心概念,是键值对的一个有序集,在里文档被表示成对象。创建集合数据库中的集合名称当我们对其添加数据时如果已经存在,则会保存到其目录下,如果未存在,则会创建集合,然后在保存数据。使用创建,如下示例连接成功许巍男保存成功保存失败参考 mongoose简介 mongoose网站:https://mongoosejs.com/ 为什么要用Mongoose Mongoose就是一个让我们...
摘要:学习之道简体中文版通往实战大师之旅掌握最简单,且最实用的教程。前言学习之道这本书使用路线图中的精华部分用于传授,并将其融入一个独具吸引力的真实世界的具体代码实现。完美展现了的优雅。膜拜的学习之道是必读的一本书。 《React 学习之道》The Road to learn React (简体中文版) 通往 React 实战大师之旅:掌握 React 最简单,且最实用的教程。 showIm...
摘要:学习之按钮篇如我上一篇学习之里面,介绍了的目录结构,说明了在这个文件里面,定义了主题色,也包括了按钮的主题色。伪连接,按钮的样式显示为连接的样式。接下来的安排,自己写的文章自己也会去实现它,另外关于的学习也不会停止。 less学习之Bootstrap按钮篇) 如我上一篇less学习之Bootstrap里面,介绍了Bootstrap的目录结构,说明了在variables.less这个文件...
阅读 3828·2021-10-08 10:12
阅读 4324·2021-09-02 15:40
阅读 933·2021-09-01 11:09
阅读 1604·2021-08-31 09:38
阅读 2542·2019-08-30 13:54
阅读 2248·2019-08-30 12:54
阅读 1242·2019-08-30 11:18
阅读 1398·2019-08-29 14:06