javascript语言自身只有字符串数据类型,没有二进制数据类型;但是在处理像TCP流或者文件流的时候,必须使用二进制数据
Buffer类 用来创建一个专门存放二进制数据的缓存区
----Buffer和字符编码
Buffer实例一般用于表示编码字符的序列 通过使用显式的字符编码,就可以在Buffer实例与普通的javascript字符串之间进行相互转换
const buf = Buffer.from('hello', 'ascii');
buf.toString('hex');
buf.toString('base64');
nodejs目前支持的字符编码包括:ascii | utf8 | utf16le | ucs2 | base64 | latin1 | binary | hex十六进制
----创建Buffer类
--Buffer.alloc(size, fill, encoding) size为Buffer大小 fill为默认填值 encoding为指定编码 后2个参数选填
返回一个指定大小的Buffer实例,如果没有设置fill,则默认填满0
--Buffer.from(array)
返回一个被array的值初始化的新Buffer实例 传入的array的元素只能是数字,不然就会自动被0覆盖
--Buffer.from(arrayBuffer, byteOffset, length)
返回一个新建的与给定的ArrayBuffer共享同一内存的Buffer
--Buffer.from(buffer)
复制传入的Buffer实例的数据,并返回一个新的Buffer实例
--Buffer.from(string,encoding)
返回一个被string值初始化的心的Buffer实例 encoding为指定编码,选填
----写入缓存区
buf.write(string,offset,length,encoding)
string 写入缓存区的字符串
offset 缓存区开始写入的索引值 默认0 选传
length 写入的字节数 默认为buffer.length 选传
encoding 指定编码 默认'utf8' 选传
返回实际写入的大小,如果buffer空间不足,则只会写入部分字符串
例如:let buf = Buffer.alloc(20); console.log(buf.write('www.baidu.com'));
----从缓存区读取数据
buf.toString(encoding,start,end)
encoding 指定编码 默认'utf8'
start 开始读取的索引位置 默认0 选传
end 结束读取的索引位置 默认为缓存区的末尾 选传
解码缓存区并使用指定的编码返回字符串
----Buffer转换为JSON对象
buf.toJSON() 返回JSON对象
当字符串化一个Buffer实例时,JSON.stringify()会隐式的调用该toJSON()方法
例如:let buf = Buffer.from('hello'); console.log(JSON.stringify(buf));
----缓存区合并
Buffer.concat(list, totalLength)
list 用于合并的Buffer对象数组列表
totalLength 指定合并后的Buffer对象的总长度 选传
返回一个或多个buf合并的新Buffer对象
例如:let buf1 = Buffer.from('hello'); let buf2 = Buffer.from('world'); let buf3 = Buffer.concat([buf1,buf2]);
----缓存区比较
buf.compare(otherBuffer)
otherBuffer 进行比较的另一个Buffer对象
返回一个数字 返回0则相同
----拷贝缓存区
buf.copy(targetBuffer,targetStart,sourceStart,sourceEnd)
targetBuffer 要拷贝的Buffer对象
targetStart 要拷贝Buffer对象的起始位置 默认0 选传
sourceStart 默认0 选传
sourceEnd 默认buffer.length 选传
例如:let buf1 = Buffer.from('hello'); let buf2 = Buffer.from('world');
buf2.copy(buf1, 2); 将buf2插入到buf1指定索引为2开始的位置上 // heworld
----缓存区裁剪
buf.slice(start, end)
start 裁剪的起始索引位置 默认0 选传
end 裁剪的结束索引位置 默认buffer.length 选传
返回一个新的缓存区 它和旧的缓存区指向同一块内存
----缓存区长度 属性
buf.length
返回Buffer对象所占据的内存长度