buffer 是用来处理二进制数据流的
挂在 global对象上,不是在内置模块中;可以直接拿来用
实例类似于整数数组
使用 C++代码在v8 堆外 分配物理内存;
buffer的api :
1, const buf1 = Buffer.alloc(10);
开辟一片内存,长度为10,且默认用0 填充;
2,const buf2= Buffer.alloc(10,1);
开辟一片内存,长度为10,用0x1 填充;
const buf3 = Buffer.allocUnsafe(10);
allocUnsafe 没有alloc 安全 但是比alloc快; 有可能会有老得数据 在里面; 需要 使用fill()或者write()重写,其实没必要使用;
Buffer.from() 的话 会存储一个某种格式的 编码 ,第一个参数是 要存储的目标; 第二个参数是格式;
实例化前:
不用实例化就自带的 属性和方法 ,叫做静态的 属性和方法(类方法);
buffer 还有这几种属性和方法:
Buffer. byteLength(); 返回 目标的 占用字节 长度;
Buffer. isBuffer.(); 返回布尔值 ;判断目标是不是buffer对象
Buffer. Concat(); 返回几个buffer实例数组的合并以后的buffer对象;
实例化后:
实例化以后的Buffer的拥有的属性;
const buff=Buffer.from("test");
//buff 开辟空间的字节长度
console.log(buff.length);
//buff的字符串化方法 也可以如参数 决定编码格式 默认utf-8 可以改成 base64
console.log(buff.toString(w));
//buff的 填充方法 一个参数 是 要填入的值 第二个和第三参数 起始和终止index值
console.log(buff.fill());
//两个buff 的内容是否一样,buff1.equas(buff2);buff1和buff2 对比 返回布尔值;
console.log(buff.equas());
//和数组里的 indexOf方法一直 ,找到返回所在index,找不到返回-1;
console.log(buff.indexOf());
//buff.copy(buff1,1,2,3) 把buff的某个片段拷贝到 buff1里去;;
//第二个参数是 buff1拷贝的起始位置; 第三个参数 是要拷贝的片段的buff 。index开始位置
// 第4个参数 是要拷贝的片段的buff 。index结束 位置
console.log(buff.copy());
修复中文乱码的问题;
中文乱码就是字节数 不够。字节 然后拼接 输出 导致的乱码
这边可以采用 内置的包 string_decode
const StringDecode = require('string-decode');
const decode=new StringDecode('utf-8') ;
const b="我是脚本"
console.log(decode.write(b) );
这样 就不会出现乱码的情况了,修正 拼字节数错误的问题