要一直走下去

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

可以看官方文档:http://nodejs.cn/api-v16/

Buffer的作用

Buffer就是一个定长的字节数组。在处理像 TCP 流或文件流时,必须使用到二进制数据。
因此在 Node.js 中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

Buffffer缓冲器常用api

buffer用于处理二进制数据,在v8堆外分配物理内存,buffffer实例类似0-255之间的整数数组,显示的数据为十六进制,数组长度是固定的,无法修改。
 
1、创建buffer
Buffer.alloc(size[, fill [, encoding]]):
  size: 新 Buffer 的所需长度。
  fill:用于预填充新 Buffer 的值。默认值: 0 。
  encoding: 如果 fill 是个字符串,则这是它的字符编码。默认值: 'utf8' 。一个英文字母1个字节,一个中文汉字3个字节
Buffer.allocUnsafe(size):
  这种方式创建速度快,但是buffer的初始值是内存中其他地方的值,有安全问题
  size: 新 Buffer 的所需长度。
  console.log(Buffer.allocUnsafe(10));   //创建⼀个⻓度为10未初始化的buffer
Buffer.from(array):
  array: 整数数组
  console.log(Buffer.from([1,2,3]));   //创建buffer,填充[1,2,3]
Buffer.from(string[, encoding]):
  string: 要编码的字符串。
  encoding:string 的字符编码。默认值: 'utf8' 。一个英文字母1个字节,一个中文汉字3个字节
  console.log(Buffer.from('eric')); //创建buffer,填充字符串
  console.log(Buffer.from('eric','base64')); //创建buffer,填充bese64编码的字符串
 
 
 

Buffffer类上常用的属性、方法

Buffer.byteLength: 返回字符串的字节长度
  console.log(Buffer.byteLength('eric'));   //返回字符串的字节长度,4
  console.log(Buffer.byteLength('中文'));   //6,一个汉字代表3个字节
Buffer.isBuffer(obj): 判断是否是buffffer
  console.log(Buffer.isBuffer({}));
  console.log(Buffer.isBuffer(Buffer.from('eric')));
Buffer.concat(list[, totalLength]): 合并buffffer
  const buf = Buffer.from('hello');
  const buf2 = Buffer.from('eric');
  console.log(buf);
  console.log(buf2);
  console.log(Buffer.concat([buf,buf2]));
  console.log(Buffer.concat([buf,buf2],10));
buf.write(string[, offffset[, length]][, encoding]): 将字符写入buffer,返回已经写入的字节数
  string: 要写入 buf 的字符串。
  offset: 从指定索引下写入。默认值: 0 。
  length: 要写入的字节数。默认值: buf.length - offset 。
  encoding: 字符串的字符编码。默认值: 'utf8' 。
  const buf = Buffer.allocUnsafe(20);
  console.log(buf);
  // console.log(buf.write('buffer'));
  console.log(buf.write('buffer',5,3));
  console.log(buf);
buf.fill(value[, offffset[, end]][, encoding]): 填充buffer
  value:用来填充 buf 的值。
  offset: 开始填充 buf 的索引。默认值: 0 。
  end: 结束填充 buf 的索引(不包含)。默认值: buf.length 。
  encoding: 如果 value 是字符串,则指定 value 的字符编码。默认值: 'utf8' 。
  console.log(buf.fill('eric',5,10));
buf.length: buffer的长度
buf.toString([encoding[, start[, end]]]): 将buffffer解码成字符串形式
  encoding: 使用的字符编码。默认值: 'utf8' 。
  start: 开始解码的字节索引。默认值: 0 。
  end: 结束解码的字节索引(不包含)。默认值: buf.length 。
  const buf = Buffer.from('test');
  console.log(buf.toString('utf8',1,3));
buf.toJSON: 返回 buffffer 的 JSON 格式
  const buf = Buffer.from('test');
  console.log(buf.toJSON());
buf.equals(otherBuffer): 对比其它buffer是否具有完全相同的字节
  otherBuffer: 要对比的buffer
  const buf1 = Buffer.from('ABC');
  const buf2 = Buffer.from('414243', 'hex');
  const buf3 = Buffer.from('ABCD');
  console.log(buf1);
  console.log(buf2);
  console.log(buf1.equals(buf2));   // 打印: true
  console.log(buf1.equals(buf3));
buf.indexOf / lastIndexOf: 查找指定的值对应的索引
buf.slice([start[, end]]): 切割buffffer
  start: 新 Buffer 开始的位置。默认值: 0 。
  end: 新 Buffer 结束的位置(不包含)。默认值: buf.length 。
  const buf = Buffer.from('abcdefghi');
  console.log(buf.slice(2,7).toString());//cdefg
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]]): 拷贝buffer
  target:要拷贝进的 Buffer 或 Uint8Array 。
  targetStart :目标 buffer 中开始写入之前要跳过的字节数。默认值: 0 。
  sourceStart: 来源 buffer 中开始拷贝的索引。默认值: 0 。
  sourceEnd: 来源 buffer 中结束拷贝的索引(不包含)。默认值: buf.length 。
  const buf = Buffer.from('abcdefghi');
  const buf2 = Buffer.from('test');
  // console.log(buf.slice(2,7).toString());
  // console.log(buf.copy(buf2));
  // console.log(buf2.toString());
  console.log(buf2.copy(buf,2,1,3));
  console.log(buf.toString());
 
 
 
posted on 2022-07-13 22:38  要一直走下去  阅读(146)  评论(0)    收藏  举报