JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作。
1. 什么是Buffer
- 缓冲区Buffer是暂时存放输入输出数据的一段内存。
- JS语言没有二进制数据类型,而在处理TCP和文件流的时候,必须要处理二进制数据。
- NodeJS提供了一个Buffer对象来提供对二进制数据的操作
- 是一个表示固定内存分配的全局对象,也就是说要放到缓存区中的字节数需要提前确定
- Buffer好比由一个多位字节元素组成的数组,可以有效的在javascript中表示二进制数据
2. 什么是字节
- 字节(Byte)是计算机存储时的一种计量单位,一个字节等于8位二进制数
- 一个位就代表一个0或1,每8个位(bit)组成一个字节(Byte)
- 字节是通过网络传输信息的单位
- 一个字节最大值十进制数是255    1234var sum =0;for(var i=0;i<8;i++){sum += Math.pow(2,i);}
3. 定义buffer的三种方式
- 通过长度定义buffer 1new Buffer(size);
- 通过数组定义buffer 1new Buffer(array);
正常情况下为0-255之间;
- 字符串创建  1new Buffer(str,[encoding]);
4.buffer常用方法
4.1 fill方法
- 手动初始化,擦干净桌子,将buffer内容清0  1buffer.fill(0);
4.2 write方法
- string, offset, length, encoding  12buffer.write('珠',0,3,'utf8');buffer.write('峰',3,3,'utf8'); //珠峰
4.3 toString方法
- 将buffer转换成字符串类型 start end 是截取的buffer的长度  1buffer.toString('utf8',3,6)
4.4 slice方法
- 截取buffer 1buffer.slice(0,4);
- 截取乱码问题 12345var StringDecoder = require('string_decoder').StringDecoder;var sd = new StringDecoder;var buffer = new Buffer('珠峰');console.log(sd.write(buffer.slice(0,4)));console.log(sd.write(buffer.slice(4)));
4.5 copy方法
- 复制Buffer 把多个buffer拷贝到一个大buffer上  1sourceBuffer.copy(targetBuffer,targetstart,sourcestart,sourceend);
4.6 concat方法
- 拼接buffer  1Buffer.concat([buf1,buf2],length);
实现concat方法
4.7 isBuffer
- 判断是否是buffer1Buffer.isBuffer
4.8 length
- 获取字节长度(显示是字符串所代表buffer的长度)12Buffer.byteLength("珠峰");buffer.length;
5.进制转换
- 将任意进制字符串转换为十进制- parseInt(“11”, 2); // 3 2进制转10进制
- parseInt(“77”, 8); // 63 8进制转10进制
- parseInt(“e7”, 16); //175 16进制转10进制
 
- 将10进制转换为其它进制字符串- (3).toString(2)) // “11” 十进制转2进制
- (17).toString(16) // “11” 十进制转16进制
- (33).toString(32) // “11” 十提制转32进制
 
base64的转换