加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

什么是Node.js Buffer类

发布时间:2023-04-13 10:26:29 所属栏目:教程 来源:
导读:纯Javascript语言对Unicode友好,能够很好地处理Unicode编码的字符串数据,但是难以处理二进制数据。在处理TCP流和文件系统时经常需要操作字节流。Node提供了一些机制,用于操作、创建、以及消耗字节流。

在Node.
纯Javascript语言对Unicode友好,能够很好地处理Unicode编码的字符串数据,但是难以处理二进制数据。在处理TCP流和文件系统时经常需要操作字节流。Node提供了一些机制,用于操作、创建、以及消耗字节流。

在Node.js中提供了Buffer,它可以处理二进制以及非Unicode编码的数据。

在Buffer类实例化中存储了原始数据。Buffer类似于一个整数数组,在V8堆(the V8 heap)原始存储空间给它分配了内存。一旦创建了Buffer实例,则无法改变大小。

Buffer类是全局对象,所以访问它不必使用require('buffer') 。

Buffers和Javascript字符串对象之间转换时需要一个明确的编码方法。下面是字符串的不同编码:

'ascii'- 7位的ASCII数据。这种编码方式非常快,它会移除最高位内容。

'utf8'- 多字节编码Unicode字符。大部分网页和文档使用这类编码方式。

'utf16le'- 2个或4个字节, Little Endian (LE)编码Unicode字符。编码范围(U+10000 到 U+10FFFF) 。

'ucs2'-'utf16le'的子集。

'base64' - Base64字符编码。

'binary'- 仅使用每个字符的头8位将原始的二进制信息进行编码。在需使用Buffer的情况下,应该尽量避免使用这个已经过时的编码方式。这个编码方式将会在未来某个版本中弃用。

'hex'- 每个字节都采用二进制编码。

在Buffer中创建一个数组,需要注意以下规则:

Buffer是内存拷贝,而不是内存共享。

Buffer占用内存被解释为一个数组,而不是字节数组。比如,new Uint32Array(new Buffer([1,2,3,4]))创建了4个Uint32Array,它的成员为 [1,2,3,4],而不是[0x1020304]或[0x4030201]。

注意:Node.js v0.8只是简单的引用了array.buffer里的buffer,而不是对其进行克隆(cloning)。

介绍一个高效的方法,ArrayBuffer#slice()拷贝了一份切片,而Buffer#slice()新建了一份。

类: Buffer
Buffer类是全局变量类型,用来直接处理二进制数据。它能够使用多种方式构建。

new Buffer(size)
sizeNumber类型

分配一个新的size大小单位为8位字节的buffer。

注意:size必须小于kMaxLength,否则将会抛出RangeError异常。

new Buffer(array)
arrayArray

使用一个8位字节array数组分配一个新的buffer。

new Buffer(buffer)
buffer{Buffer}

拷贝参数buffer的数据到Buffer实例。

new Buffer(str[, encoding])
str String类型 - 需要编码的字符串。

encoding String类型 - 编码方式, 可选。

分配一个新的buffer ,其中包含着传入的str字符串。encoding 编码方式默认为'utf8'。

类方法: Buffer.isEncoding(encoding)
encoding {String} 用来测试给定的编码字符串

如果参数编码encoding是有效的,则返回true,否则返回false。

类方法: Buffer.isBuffer(obj)
obj对象

返回:Boolean

obj如果是Buffer 返回true,否则返回 false。

类方法: Buffer.byteLength(string[, encoding])
string String类型

encoding String类型,可选的,默认为: 'utf8'

返回:Number类型

将会返回这个字符串真实字节长度。 encoding编码默认是:utf8。 这和String.prototype.length不一样,因为那个方法返回这个字符串中字符的数量。

例如:

str = '\u00bd + \u00bc = \u00be';
 
console.log(str + ": " + str.length + " characters, " +
  Buffer.byteLength(str, 'utf8') + " bytes");
 
// ½ + ¼ = ¾: 9 characters, 12 bytes
类方法: Buffer.concat(list[, totalLength])
list {Array} 用来连接的数组

totalLength {Number 类型} 数组里所有对象的总buffer大小

返回一个buffer对象,它将参数buffer数组中所有buffer对象拼接在一起。

如果传入的数组没有内容,或者totalLength是0,那将返回一个长度为0的buffer。

如果数组长度为1,返回数组第一个成员。

如果数组长度大于0,将会创建一个新的Buffer实例。

如果没有提供totalLength参数,会根据buffer数组计算,这样会增加一个额外的循环计算,所以提供一个准确的totalLength参数速度更快。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章