在客户端Javascript脚本代码中,对于二进制数据并没有提供一个很好的支持。然而,在处理TCP流或文件流时,必须要处理二进制数据。因此,在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。
在Node.js中,Buffer是一个可以在任何模块中被利用的类,不需要为该类的使用加载恩赫模块。
Buffer类有三种构造函数:
第一种是只需将缓存区大小(以字节为单位)指定为构造函数的参数,形式为new Buffer(size),Buffer有一个length属性,属性值为缓存区大小。可以使用该对象的fill方法来初始化缓存区内容:buf.fill(value,[offset],[end]),value是必须制定的参数,为被写入的值,后两个可选,offset代表从第几个字节开始写入,默认0,end代表一直写到第几个字节处,默认Buffer对象大小,即写到缓存区底部。
第二种是使用数组初始化缓存区,形式为new Buffer(array)。
第三种是直接使用一个字符串来初始化缓存区,形式new Buffer(str, [encoding]),str为写入字符串,第二个参数是指定文字编码格式。默认utf-8。
区分字符串与缓存区的长度:
str=”我爱你”;
buf=new Buffer(str);
str.length;//3
buffer.length;//9
可以使用一0开始的序号获取字符串对象或缓存区的数据。但获取数据时,字符串对象是以一个文字为单位的,而缓存区对象一字节作为一个单位,所以:
str[1];//输出爱
buf[1];//输出136
字符串创建后不可修改。str[1]=”恨”,输出str,还是’我爱你‘。不可改变。而缓存区中的数据是个以改变的。
Buffer对象的toString方法可以将缓存区中的数据转换成字符串。在需要修改缓存区中数据时,可以使用Buffer对象的write方法。在Nodejs中还可以使用StringDecoder对象将缓存区中的数据转换成字符串,该对象的作用和toString一样,只是对utf-8编码格式提供了更好的支持。
Buffer与数值对象之间的转换
在Nodejs中提供了将缓存区中二进制都去为js中的Number或将Number类型的数据转换为更精确的类型后向Buffer中写入的方法。具体分为都系列与写系列方法。
Buffer与JSON对象之间的转化
在Node中可以使用JSON.stringify方法将缓存区中的数据转换为一个字符串,也可以使用JSON.parse方法将一个转换过的字符串还原成数组。
Buffer类有个方法,copy可以复制缓存区,可以将一个对象中保存的二进制数据复制到另一个对象中。
在Nodejs中Buffer类定义了三个类方法:
isBuffer: 判断一个对象是否为Buffer对象。
byteLength: 计算指定字符串的字节数。
concat: 将几个Buffer对象合并结合创建为一个新的Buffer对象。
isEncoding: 检测一个字符串是否为一个有效的编码格式字符串。