纯JavaScript是Unicode友好的,但是对于二进制数据却不是,在处理TCP流或文件系统时,必须处理八位位组流,Node提供了Buffer类,该类提供了实例来存储类似于整数数组的原始数据,但对应于V8堆外部的原始内存分配。
缓冲区类是全局类,可以在应用程序中访问而无需导入缓冲区模块。
创建缓冲区
节点缓冲区可以通过多种方式构造。
以下是创建 10 个八位字节的未初始化缓冲区的语法-
var buf=new Buffer(10);
以下是从给定数组创建Buffer的语法-
var buf=new Buffer([10, 20, 30, 40, 50]);
以下是从给定的字符串和可选的编码类型创建Buffer的语法-
var buf=new Buffer("Simply Easy Learning", "utf-8");
尽管" utf8"是默认编码,但是您可以使用以下任何一种编码:" ascii"," utf8"," utf16le"," ucs2"," base64"或" hex"。
写入缓冲区
以下是写入节点缓冲区的方法的语法-
buf.write(string[, offset][, length][, encoding])
string - 这是要写入缓冲区的字符串数据。
offset - 这是开始写入缓冲区的索引,默认值为0。
length - 这是要写入的字节数,默认为buffer.length。
encoding - 要使用的编码。 " utf8"是默认编码。
返回值
此方法返回写入的八位位组数。如果缓冲区中没有足够的空间来容纳整个字符串,则它将写入字符串的一部分。
buf=new Buffer(256); len=buf.write("Simply Easy Learning"); console.log("Octets written : "+ len);
执行以上程序后,将产生以下输出-
Octets written : 20
从缓冲区读取
以下是从节点缓冲区读取数据的方法的语法-
buf.toString([encoding][, start][, end])
encoding - 要使用的编码, " utf8"是默认编码。
start - 开始读取的开始索引,默认为0。
end - 结束读取的索引,默认为完整缓冲区。
返回值
此方法从使用指定字符集编码编码的缓冲区数据中解码并返回字符串。
buf=new Buffer(26); for (var i=0 ; i < 26 ; i++) { buf[i]=i + 97; } console.log( buf.toString('ascii')); //outputs: abcdefghijklmnopqrstuvwxyz console.log( buf.toString('ascii',0,5)); //outputs: abcde console.log( buf.toString('utf8',0,5)); //outputs: abcde console.log( buf.toString(undefined,0,5)); //encoding defaults to 'utf8', outputs abcde
执行以上程序后,将产生以下输出-
abcdefghijklmnopqrstuvwxyz abcde abcde abcde
换为JSON
以下是将节点缓冲区转换为JSON对象的方法的语法-
buf.toJSON()
返回值
此方法返回Buffer实例的JSON表示形式。
var buf=new Buffer('Simply Easy Learning'); var json=buf.toJSON(buf); console.log(json);
执行以上程序后,将产生以下输出-
{ type: 'Buffer', data: [ 83, 105, 109, 112, 108, 121, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110, 103 ] }
串联缓冲区
以下是将节点缓冲区连接到单个节点缓冲区的方法的语法-
Buffer.concat(list[, totalLength])
list - 要连接的Buffer对象的数组列表。
totalLength - 这是连接时缓冲区的总长度。
返回值
此方法返回一个Buffer实例。
var buffer1=new Buffer('LearnFk '); var buffer2=new Buffer('Simply Easy Learning'); var buffer3=Buffer.concat([buffer1,buffer2]); console.log("buffer3 content: " + buffer3.toString());
执行以上程序后,将产生以下输出-
buffer3 content: LearnFk Simply Easy Learning
比较缓冲区
以下是比较两个节点缓冲区的方法的语法-
buf.compare(otherBuffer);
进行比较的缓冲区
返回值
返回一个数字,该数字指示它按排序顺序在otherBuffer之前还是之后或与otherBuffer相同。
var buffer1=new Buffer('ABC'); var buffer2=new Buffer('ABCD'); var result=buffer1.compare(buffer2); if(result < 0) { console.log(buffer1 +" comes before " + buffer2); } else if(result === 0) { console.log(buffer1 +" is same as " + buffer2); } else { console.log(buffer1 +" comes after " + buffer2); }
执行以上程序后,将产生以下输出-
ABC comes before ABCD
复制缓冲区
以下是复制节点缓冲区的方法的语法-
buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
targetBuffer - 将在其中复制缓冲区的缓冲区对象。
targetStart - 数字,可选,默认值:0
sourceStart - 数字,可选,默认值:0
sourceEnd - 数字,可选,默认值:buffer.length
返回值
没有返回值。即使目标存储区与源重叠,也将数据从此缓冲区的区域复制到目标缓冲区中的区域,如果未定义,则targetStart和sourceStart参数默认为0,而sourceEnd默认为buffer.length。
var buffer1=new Buffer('ABC'); //copy a buffer var buffer2=new Buffer(3); buffer1.copy(buffer2); console.log("buffer2 content: " + buffer2.toString());
执行以上程序后,将产生以下输出-
buffer2 content: ABC
切片缓冲区
以下是获取节点缓冲区的子缓冲区的方法的语法-
buf.slice([start][, end])
start - 数字,可选,默认值:0
end - 数字,可选,默认值:buffer.length
返回值
返回一个新缓冲区,该缓冲区引用与旧缓冲区相同的内存,但偏移量由开始(默认为0)和结束(默认为buffer.length)索引进行切片,负索引从缓冲区的末尾开始。
var buffer1=new Buffer('LearnFk'); //切片缓冲区 var buffer2=buffer1.slice(0,9); console.log("buffer2 content: " + buffer2.toString());
执行以上程序后,将产生以下输出-
buffer2 content: Learnfk
缓冲长度
以下是获取以字节为单位的节点缓冲区大小的方法的语法-
buf.length;
返回值
返回缓冲区的大小(以字节为单位)。
var buffer=new Buffer('LearnFk'); //缓冲区长度 console.log("buffer length: " + buffer.length);
执行上述程序时,将产生以下输出-
buffer length: 7以下是Node.js中可用的Buffers模块的参考。 有关更多详细信息,请参阅官方文档。Sr.No. Method & 描述 1
新缓冲区(大小)
分配一个新的大小八位字节的缓冲区。请注意,大小不得超过kMaxLength。否则,将在此处引发RangeError。
2新缓冲区(缓冲区)
将传递的缓冲区数据复制到新的Buffer实例上。
3新缓冲区(str [,编码])
分配一个包含给定str的新缓冲区。编码默认为" utf8"。
4buf.length
返回缓冲区的大小(以字节为单位)。注意,这不一定是内容的大小。 length是指为缓冲区对象分配的内存量。更改缓冲区的内容时不会更改。
5buf.write(string [,offset] [,length] [,encoding])
使用给定的编码将字符串以偏移量写入缓冲区。 offset默认为0,编码默认为'utf8'。 length是要写入的字节数。返回写入的八位字节数。
6buf.writeUIntLE(值,偏移量,byteLength [,noAssert])
在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。
7buf.writeUIntBE(值,偏移量,byteLength [,noAssert])
在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。
8buf.writeIntLE(值,偏移量,byteLength [,noAssert])
在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。
9buf.writeIntBE(值,偏移量,byteLength [,noAssert])
在指定的偏移量和byteLength处将值写入缓冲区。支持高达48位的精度。将noAssert设置为true可跳过值和偏移量的验证。默认为false。
10buf.readUIntLE(offset,byteLength [,noAssert])
所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
11buf.readUIntBE(offset,byteLength [,noAssert])
所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
12buf.readIntLE(offset,byteLength [,noAssert])
所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
13buf.readIntBE(offset,byteLength [,noAssert])
所有数字读取方法的通用版本。支持高达48位的精度。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
14buf.toString([encoding] [,开始] [,结束])
从使用指定字符集编码编码的缓冲区数据中解码并返回字符串。
15buf.toJSON()
返回Buffer实例的JSON表示形式。当对Buffer实例进行字符串化时,JSON.stringify隐式调用此函数。
16buf [index]
获取并设置索引的八位位组。该值指的是单个字节,因此合法范围在0x00和0xFF hex之间或0和255之间。
17buf.equals(otherBuffer)
如果此缓冲区和otherBuffer具有相同的字节,则返回一个布尔值。
18buf.compare(otherBuffer)
返回一个数字,该数字指示此缓冲区是在排序顺序之前还是在otherBuffer之前或之后。
19buf.copy(targetBuffer [,targetStart] [,sourceStart] [,sourceEnd])
即使目标存储区与源重叠,也将数据从此缓冲区的区域复制到目标缓冲区中的区域。如果未定义,则targetStart和sourceStart参数默认为0,而sourceEnd默认为buffer.length。
20buf.slice([开始] [,结束])
返回一个新缓冲区,该缓冲区引用与旧缓冲区相同的内存,但是由开始(默认为0)和结束(默认为buffer.length)索引偏移和裁剪。负索引从缓冲区的末尾开始。
21buf.readUInt8(offset [,noAssert])
从缓冲区以指定的偏移量读取一个无符号的8位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
22buf.readUInt16LE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取一个无符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
23buf.readUInt16BE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取一个无符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
24buf.readUInt32LE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取一个无符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
25buf.readUInt32BE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取一个无符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
26buf.readInt8(offset [,noAssert])
从缓冲区以指定的偏移量读取带符号的8位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
27buf.readInt16LE(offset [,noAssert])
以指定的字节序格式从缓冲区读取带符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
28buf.readInt16BE(offset [,noAssert])
以指定的字节序格式从缓冲区读取带符号的16位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
29buf.readInt32LE(offset [,noAssert])
使用指定的字节序格式从缓冲区中读取一个带符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
30buf.readInt32BE(offset [,noAssert])
使用指定的字节序格式从缓冲区中读取一个带符号的32位整数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
31buf.readFloatLE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取32位浮点数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
32buf.readFloatBE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取32位浮点数。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
33buf.readDoubleLE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取64位double值。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
34buf.readDoubleBE(offset [,noAssert])
使用指定的字节序格式从缓冲区读取64位double值。将noAssert设置为true以跳过偏移量验证。这意味着偏移量可能超出缓冲区的末尾。默认为false。
35buf.writeUInt8(value,offset [,noAssert])
将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号8位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
36buf.writeUInt16LE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定正确性,否则不应使用它。默认为false。
37buf.writeUInt16BE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
38buf.writeUInt32LE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
39buf.writeUInt32BE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的无符号32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
40buf.writeInt8(值,偏移量[,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的8位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
41buf.writeInt16LE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
42buf.writeInt16BE(值,偏移量[,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的16位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
43buf.writeInt32LE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
44buf.writeInt32BE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的带符号的32位整数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定正确性,否则不应使用它。默认为false。
45buf.writeFloatLE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。请注意,该值必须是有效的32位浮点数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
46buf.writeFloatBE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。注意,value必须是有效的32位浮点数。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
47buf.writeDoubleLE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。注意,value必须是有效的64位double。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
48buf.writeDoubleBE(value,offset [,noAssert])
使用指定的字节序格式将值以指定的偏移量写入缓冲区。注意,value必须是有效的64位double。将noAssert设置为true可跳过值和偏移量的验证。这意味着该值对于特定功能可能太大,并且偏移量可能超出缓冲区的末尾,从而导致这些值被静默丢弃。除非您确定其正确性,否则不应该使用它。默认为false。
49buf.fill(value [,offset] [,end])
用指定的值填充缓冲区。如果没有给出偏移量(默认为0)和结束符(默认为buffer.length),它将填充整个缓冲区。
缓冲类方法
Sr.No. Method & 描述 1Buffer.isEncoding(encoding)
如果编码是有效的编码参数,则返回true,否则返回false。
2Buffer.isBuffer(obj)
判断obj是否为Buffer。
3Buffer.byteLength(string [,encoding])
给出字符串的实际字节长度,编码默认为" utf8"。
4Buffer.concat(list [,totalLength])
返回一个缓冲区,该缓冲区是将列表中的所有缓冲区连接在一起的输出。
5Buffer.compare(buf1,buf2)
与buf1.compare(buf2)相同。对排序缓冲区数组很有用。
参考链接
https://www.learnfk.com/nodejs/nodejs-buffers.html
标签:Node,noAssert,false,无涯,偏移量,默认,缓冲区,buf,Buffers From: https://blog.51cto.com/u_14033984/9353566