nodejs中的buffer的用法

1、buffer的介绍

  在引入 TypedArray 之前,JavaScript 语言没有用于读取或操作二进制数据流的机制。 Buffer 类是作为 Node.js API 的一部分引入的,用于在 TCP 流、文件系统操作、以及其他上下文中与八位字节流进行交互。

  现在可以使用 TypedArray, Buffer 类以更优化和更适合 Node.js 的方式实现了 Uint8Array API。

  Buffer 类的实例类似于从 0 到 255 之间的整数数组(其他整数会通过 & 255 操作强制转换到此范围),但对应于 V8 堆外部的固定大小的原始内存分配。 Buffer 的大小在创建时确定,且无法更改。

  Buffer 类在全局作用域中,因此无需使用 require('buffer').Buffer。

2、buffer中常用的方法

  (1)length toString Buffer.isBuffer slice

   (2) concat indexOf split

/**
 * 1、存储二进制文件 0 1 最大每个位中不能超过1
 * 2、一个字节几个位  8个bit位组成
 * 3、汉字 几个字节组成 gbk 2个字节 node默认不支持gbk编码
 * 4、utf8 一个汉字  2个字节
 * 5、一个汉字 3个字节 24个位  buffer 将2进制转化成16进制  只是短而已。
 * 6、buffer中存储的是16进制  内存 存在声明的时候 需要制定长度 单位中数字  都是字节单位
 * 数字、字符串、数组
 */
let buffer=Buffer.alloc(10);
console.log(buffer)
let buffer1=Buffer.from('message');  //node utf8 toString()
console.log(buffer1);
let buffer2=Buffer.from([0xe7,0x88,0xb1]);
console.log(buffer2);
console.log(buffer2.toString('utf8')); // 可以和字符串任意转化
//读取文件 可能要操作内存  http
// 进制转换的base64位 加密算法  汉字举例 3*8=>4*6
let buf=Buffer.from('爱')
console.log(buf);
console.log(0xe7.toString(2));
console.log(0x88.toString(2));
console.log(0xb1.toString(2));

// 00111001 00111000 00100010 00110001 一般转化成base64 后比原内容 大1/3 最大2*6-1=63 0-63  ==64位置
// 小图标 icon 可以替换所有的url 不需要发送http请求
// base64的编码是公开的。
let str='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
str+=str.toLocaleLowerCase();
str+='0123456789+/';
console.log(str[57]+str[56]+str[62]+str[32]); //cookie
//通过编码可以解决很多问题。
// buffer的声明方式 3种 长度 数字 数组  buffer不能增大
// 数组 索引 循环 slice 
// Buffer 类在全局作用域中,因此无需使用 require('buffer').Buffer。
let buffer3=Buffer.from([11,12,13]);
let newBuffer=buffer3.slice(0,3);
newBuffer[0]=100;
console.log(buffer3);
console.log(Buffer.isBuffer(buffer3));

// toString 可以将buffer转化成字符串
// length  可以获取字节的个数
// Buffer.isBuffer
// copy contact
Buffer.prototype.copy=function(target,targetStart,sourceStart=0,sourceEnd=this.length){
    for(let i=sourceStart;i<sourceEnd;i++){
        target[targetStart+i]=this[i];
    }
}
let buf11=Buffer.from('学');
let buf12=Buffer.from('习');
let buf13=Buffer.alloc(6);
buf11.copy(buf13,0,0,3);
buf12.copy(buf13,3);
console.log(buf13,toString());

// copy, contact 用的很多
console.log(Buffer.concat([buf11,buf12]).toString());

// reduce求和
Buffer.concat=function(bufferList,bufferLength=bufferList.reduce((a,b)=>a+b.length,0)){
    let buffer=Buffer.alloc(bufferLength);
    let offset=0;
    BufferList.forEach(item=>{
        item.copy(buffer,offset);
        offset+=item.length;
    })
    return buffer;
}

// length toString Buffer.isBuffer slice concat
let bufferLove=Buffer.form('我爱你我爱你');
console.log(bufferLove.indexOf('我',6));
bufferLove.split('爱');  //实现buffer的分隔
// 编码 ASCII 美国 字母 符号都占用1个字节
// gb2312 两个字节连起来,算一个中文  第一个字节如果超过127 下一个字节,组成一个汉字
// gb18030 127*255 =36400
// unicode 编码
// utf8 基于unicode编码 实现可编码

Buffer.prototype.split=function(sep){
    let len=buffer.from(sep).length;
    let offset=0;
    let arr[];
    while(-1!=(current=this.indexOf(sep,offset))){
        arr.push(this.slice(offset,current));
        offset=current+len;
    }
    arr.push(this.slice(offset));
    return arr;
}
// length toString Buffer.isBuffer slice
// concat indexOf split

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vues

刚好遇见你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值