Nodejs系列-7-Buffer模块
Buffer是用于操作二进制数据的类。
JavaScript 语言没有用于读取或操作二进制数据流的机制。 Buffer 类是作为 Node.js API 的一部分引入的,用于在 TCP 流、文件系统操作、以及其他上下文中与八位字节流进行交互.
Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require,因此无需使用 require(‘buffer’).Buffer。ps: new Buffer
已废弃
var bf=Buffer.from([1,2,3,4,10]);
console.log(bf);
// <Buffer 01 02 03 04 0a> 返回一个字节长度为5的Buffer,以16进制打印出来,1字节=8位
// 转换成二进制来表示的话是这样: <Buffer 00000001 00000010 00000011 00000100 00001010>
console.log(bf.length);//5
每个字节能表达的大小为0-255, 其他整数会通过 & 255 操作强制转换到此范围。
Buffer实例一旦创建,长度无法修改。
常用方法
buf为实例方法,Buffer为对象方法。
填充数据,可以设置起始点和编码方式
buf.fill(value[, offset[, end]][, encoding])
要写入 buf 的字符串,可以设置起始点,长度和编码方式
buf.write(string[, offset[, length]][, encoding])
查找目标值是否存在
buf.includes(value[, byteOffset][, encoding])
查找索引
buf.indexOf(value[, byteOffset][, encoding])
比较两个buffer是否相等(数值是否相等,而非比较引用地址)
buf.equals(otherBuffer)
拷贝一个buffer
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
比较两个buffer大小
buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
分配一个大小为 size 字节的新建的 Buffer 。
Buffer.alloc(size[, fill[, encoding]]) 如果 fill 为 undefined ,则该 Buffer 会用 0 填充,encoding默认为 'utf8' Buffer也有下标,可以通过 buf[index] 进行操作 length:字节长度(非字符长度)
返回字符串的实际字节长度(js中字符串长度获取的是字符长度)
Buffer.byteLength(string[, encoding])
比较两个buf的大小
Buffer.compare(buf1, buf2)
返回一个合并了 list 中所有 Buffer 实例的新 Buffer
Buffer.concat(list[, totalLength])
使用八位字节数组 array 分配一个新的 Buffer。
Buffer.from(array)
判断对象是否是一个 Buffer
Buffer.isBuffer(obj)
判断Buffer支持的字符编码方式
Buffer.isEncoding(encoding) encoding可选值有:ascii、utf8、utf16le、ucs2、base64、latin1、binary、hex
补充
js弱类型语言,所以很少涉及到进制之前的转换,再补充一边相关内容,防止遗忘:
ECMAScript-Numer类型
ECMAScript中的基本数据类型Numer,最基本的数值字面量格式是十进制,除了以十进制表示外,整数还可以通过八进制(以8为基础)或十六进制(以16为基数)的字面值来表示。其中,八进制字面值的第一位必须是零(0),然后是八进制数字序列(07),十六进制字面值的前两位必须是0x,后跟任何十六进制数字(09及AF)。其中字母AF可以大写,也可以小写:
var octalNum1 = 070; // 八进制的56
var hexNum1 = 0xA; // 十六进制的10
位/字节/字
- 位(bit):计算机中的最小单位,逻辑0或1就是一个位
- 字节(byte):有8位组成一个字节
- 字(word):16位为一个字,32位为双字
C/C++语言中数据类型:大小(字节)
double 8
float 4
long 4
int 2 (32位或64位系统下int的长度为4字节)
char 1