什么是Node.js Buffer类
发布时间:2023-04-13 10:26:29 所属栏目:教程 来源:
导读:纯Javascript语言对Unicode友好,能够很好地处理Unicode编码的字符串数据,但是难以处理二进制数据。在处理TCP流和文件系统时经常需要操作字节流。Node提供了一些机制,用于操作、创建、以及消耗字节流。
在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参数速度更快。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |