缓冲区对象1.什么是缓冲区在客户端Javascript脚本代码中,对二进制数据没有很好的支持。但是,在处理TCP流或文件流时,必须处理二进制数据。因此,在Node.js中,定义了一个Buffer类,用于创建一个专门用于存储二进制数据的缓冲区。简单来说,Buffer对象就是用来处理TCP数据流(暂不列出)和文件的,比如读取一个txt文件,一张jpeg格式的图片,或者一个word文档。2.直接创建buffer对象使用new关键字创建该类的实例对象varbuf=newBuffer()3.Buffer类有三种构造函数3.1指定buffer大小(以字节为单位)作为构造函数的参数3.1.1Buffer的Length属性创建的Buffer对象有一个length属性,这个属性的值就是创建的Buffer对象的缓冲区大小varbuf=newBuffer(100);console.log(buf);console。log(buf.length);//结果<缓冲区c8eb759d93000000010000000100000004000000040000000000000000000000286e330123b00000000000000000000f865...>1003.1.2初始化创建的Buffer对象此时创建的buf对象还没有初始化,换句话说就是每次console的结果。log(buf)都不同,但是这个buf对象的length属性是固定的100//console.log(buf)再次输出与上面不同B80fill方法初始化buffer中的内容buf.fill(val,[offset],[end])第一个参数是需要的Bfuffer对象的填充值,填充值以16进制计算。一般val参数的值为0,如果val参数为值,则填充结果为参数val。如果val参数为数组或对象,则填充结果全为0。如果val参数为true,则填充结果全为1。如果val参数为false,则填充结果全为0。如果val参数是一个字符串,填充结果是每个字符串中的字符对应的ascii表中的所有值,并且每个字符依次在长度值中循环。第二个参数和第三个参数optionaloffset表示写入的起始位置。默认值为0end,表示要写入值的字节数。默认是lengthValue3.2直接用数组初始化buffervarbuf=newBuffer(['a','b','c']);console.log(buf)//result3.3直接使用一个String初始化缓冲区varbuf=newBuffer(str,[encoding])第一个参数str为初始化缓冲区的字符串,第二个参数encoding用于指定字符串的编码格式,默认不同于utf8编码格式输出结果varascii=newBuffer('aLittleTeaalittlebit','ascii');console.log('ascii',ascii);//结果//asciivarutf8=newBuffer('aLittleTeaalittle','utf8');console.log('utf8',utf8);//结果//utf8varutf16le=newBuffer('aLittleTea一点点','utf16le');console.log('utf16le',utf16le);//结果//utf16le<缓冲区61004c006900740074006c006500540065006100004eb970b970>varucs2=newBuffer('aLittleTeaalittlebit','ucs2');console.log('ucs2',ucs2);//结果//ucs2varbase64=newBuffer('aLittleTeaalittle','base64');console.log('base64',base64);//结果//base64varbinary=newBuffer('aLittleTeaalittlebit','binary');console.log('binary',binary);//结果//二进制varhex=newBuffer('aLittleTea','hex');console.log('hex',hex);//结果//hex4.字符串的长度和缓冲区的长度在Node.js中,字符串的长度与基于字符串创建的缓冲区的长度是不一样的,因为在计算字符串的长度时,Bits被用作单位,计算缓冲区长度时,以字节为单位。一个汉字字符串的长度是1,但是Buffer缓冲区中一个汉字的字节长度是3。也就是说,在Node.js的Buffer类中,一个汉字的字节长度是3varchinese='一点奶茶有点好吃';varbuf=newBuffer(chinese);console.log(buf);//result//console.log(chinese.length);//10console.log(buf.length);//30console.log(中文[4]);//茶console.log(buf[4]);//130注意:buf中的编码为16进制,输出结果为10进制//修改中文中的一个字符Chinese[4]='Xi';//字符串对象一旦创建,不可修改console.log(中国人);//一点点奶茶好喝//修改buf的一个字节buf[0]='e4';buf[1]='ba';buf[2]='8c';console.log(buf)////要修改的前三个字节都是00