node-buffer

什么是buffer

  1. 缓冲区Buffer是暂时存放输入输出数据的一段内存
  2. JS语言没有二进制数据类型,而在处理TCP和文件流的时候,必须要处理二进制数据
  3. NodeJS提供了一个Buffer对象来提供对二进制数据的操作
  4. 是一个表示固定内存分配的全局对象,也就是说要放到缓存区中的字节数需要提前确定
  5. Buffer好比由一个8位字节元素组成的数组,可以有效的在JavasScript中表示二进制数据

什么是字节

  1. 字节(Byte)是计算机存储时的一种计量单位,一个字节等于8位二进制数
  2. 一个位就代表一个0或1,每8个位(bit)组成一个字节(Byte)
  3. 字节是通过网络传输信息的单位
  4. 一个字节最大值十进制数是255 2**8-1;

进制

  1. 0b 2进制 0x 16进制 0o 8进制
  2. 将任意进制字符串转换为十进制

parseInt(“11”, 2); // 3 2进制转10进制
parseInt(“77”, 8); // 63 8进制转10进制
parseInt(“e7”, 16); //231 16进制转10进制

  1. 将10进制转换为其它进制字符串

(3).toString(2)) // “11” 十进制转2进制
(17).toString(16) // “11” 十进制转16进制
(33).toString(32) // “11” 十提制转32进制

定义buffer的三种方法

3.1通过长度定义buffer

  1. 创建一个长度为10且用0填充的buffer:const buf = Buffer.alloc(10)
  2. 创建一个长度为10,且用0x1填充的 const buf = Buffer.alloc(10,1)
  3. 创建一个长度为10且为初始化的buffer const buf = Buffer.allocUnsafe(10)

3.2 通过数组定义buffer

  1. const buf = Buffer.from([1, 2, 3])// 0-255之间

3.3 字符串创建

const buf = Buffer.from(‘这是一个buffer’)

buffer的常用api

  1. buffer.fill(0) 手动初始化,擦干净桌子,将buffer内容清0
  2. buffer.write(string, offset, length, encoding)
  3. writeInt8
    buf = new Buffer(4);
    buf.writeInt8(0,0);
    buf.writeInt8(16,1);
    buf.writeInt8(32,2);
    buf.writeInt8(48,3)
  4. 不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序。
    Big-endian:将高序字节存储在起始地址(高位编址)
    Little-endian:将低序字节存储在起始地址(低位编址)
    let buf3 = new Buffer(4)
    buf3.writeInt16BE(28,0)
    console.log(buf3);//<Buffer 01 00 00 00>
    console.log(buf3.readInt16BE(0));
    buf3.writeInt16LE(2
    8,2);
    console.log(buf3);//<Buffer 01 00 00 01>
    console.log(buf3.readInt16LE(2));
  5. buf.toString([encoding[, start[, end]]])
  6. buf.slice([start[, end]])
  7. 截取乱码问题
    let {StringDecoder} = require(‘string_decoder’);
    let sd = new StringDecoder();
    let buffer = new Buffer(‘珠峰’);
    console.log(sd.write(buffer.slice(0,4)));
    console.log(sd.write(buffer.slice(4)));
  8. buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
  9. Buffer.concat(list[, totalLength])
  10. Buffer.isBuffer
  11. buffer.length

base64

  1. Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
  2. Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3
const CHARTS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
function transfer(str){
  let buf = Buffer.from(str);
  let result = '';
  for(let b of buf){
      result += b.toString(2);
  }
    return result.match(/(\d{6})/g).map(val=>parseInt(val,2)).map(val=>CHARTS[val]).join('');
}
let r = transfer('珠');//54+g
发布了1 篇原创文章 · 获赞 2 · 访问量 607

猜你喜欢

转载自blog.csdn.net/qqlovefanfan/article/details/90512064
今日推荐