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));
}
结果:
中
文字
符串
!�
复制代码

 

posted @   金钩梨  阅读(190)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示