node 基础API(Buffer)

Posted jingouli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node 基础API(Buffer)相关的知识,希望对你有一定的参考价值。

创建Buffer:

// 创建长度为10的Buffer
Buffer.alloc(10);
// <Buffer 00 00 00 00 00 00 00 00 00 00>

// 用1填充
Buffer.alloc(5,1);
// <Buffer 01 01 01 01 01>

// 创建一个包含[0x1,0x2,0x3]的Buffer
Buffer.from([1,2,3])
// <Buffer 01 02 03>

// 使用字符串  utf8格式
Buffer.from(‘test‘)
// <Buffer 74 65 73 74>

// 使用base64格式
Buffer.from(‘test‘,‘base64‘)
<Buffer b5 eb 2d>

 

Buffer的一些方法和属性

// 占的字节数
Buffer.byteLength(‘test‘);    // 4
Buffer.byteLength(‘你好‘);    // 6

// 判断是否是Buffer对象
Buffer.isBuffer();    // false
Buffer.isBuffer(Buffer.from([1,2,3]));    // true

// 拼接
const buf1=Buffer.from(‘this ‘);
const buf2=Buffer.from(‘is ‘);
const buf3=Buffer.from(‘a ‘);
const buf4=Buffer.from(‘test ‘);
const buf5=Buffer.from(‘! ‘);

const buf=Buffer.concat([buf1,buf2,buf3,buf4,buf5]);
console.log(buf.toString());
// this is a test !

// 长度
const buf=Buffer.from(‘this is a buffer‘);
console.log(buf.length);    // 15

// toString()    base64格式
buf.toString(‘base64‘);    // dGhpcyBpcyBhIGJ1ZmZlcg==

// 填充
const buf3=Buffer.allocUnsafe(10);
console.log(buf3);
console.log(buf3.fill(5,3,7));
// <Buffer c8 fc 88 6e e5 01 00 00 00 00>
// <Buffer c8 fc 88 05 05 05 05 00 00 00>

// 比较Buffer里面的内容是否相等
const buf4 = Buffer.from(‘test‘);
const buf5 = Buffer.from(‘test‘);
const buf6 = Buffer.from(‘test1‘);

console.log(buf4.equals(buf5));    // true
console.log(buf4.equals(buf6));    // false

// indexOf
console.log(buf4.indexOf(‘es‘));     // 1
console.log(buf4.indexOf(‘aaa‘));    // -1

 

Buffer decode

// 每隔5个字节打印字符,由于每个中文占3个字节,所以会出现乱码
const buf=Buffer.from(‘中文字符串!‘);

for(let i=0;i<buf.length;i+=5)
    const b=Buffer.allocUnsafe(5);
    buf.copy(b,0,i);
    console.log(b.toString());

结果:
中?
?字?
??串
!?

// 所以需要借助 string_decoder  字符串解码器
const StringDecoder=require(‘string_decoder‘).StringDecoder;
const decoder=new StringDecoder(‘utf8‘);

const buf=Buffer.from(‘中文字符串!‘);

for(let i=0;i<buf.length;i+=5)
    const b=Buffer.allocUnsafe(5);
    buf.copy(b,0,i);
    console.log(decoder.write(b));

结果:
中
文字
符串
!?

 

以上是关于node 基础API(Buffer)的主要内容,如果未能解决你的问题,请参考以下文章

Node http,buffer

Node.js 指南(迁移到安全的Buffer构造函数)

node里面的buffer理解

Node的文件系统及Buffer概述

Node.js(十四)——Net模块之Buffer

Node.js—Buffer对象