博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js学习之路03——Buffer类初识
阅读量:6699 次
发布时间:2019-06-25

本文共 2617 字,大约阅读时间需要 8 分钟。

buffer对象

1. 什么是buffer

在客户端
Javascript脚本代码中,对于二进制数据没有提供一个很好的支持。然而,在处理TCP流或文件流时,必须要处理二进制数据。因此,在Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。

简单来说,Buffer对象就是为了处理TCP数据流(暂且不表)和文件,比如读取一个txt文件,一张jpeg格式的图片,或者是一个word文档,都可以。

2. 创建buffer对象

  • 直接使用new关键字来创建该类的实例对象
var buf = new Buffer()

3. Buffer类拥有三种形式的构造函数

3.1 将缓存区大小(以字节为单位)指定为构造函数的参数

3.1.1 Bufferlength属性

  • 被创建的Buffer对象拥有一个length属性,这个属性值就是创建的Buffer对象的缓存区大小
var buf = new Buffer(100);console.log(buf);console.log(buf.length);// result
100

3.1.2 初始化创建的Buffer对象

  • 此时创建的buf对象,没有被初始化,换句话说,就是每次console.log(buf)的结果都是不一样的,但是这个buf对象的length属性是固定的100
// 再次console.log(buf),输出的结果与上面的不一样
  • 使用Buffer对象的fill方法来初始化缓存区中的内容
buf.fill(val, [offset], [end])
  • 第一个参数为必填的Buffer对象的填充值,填充值均以16进制计算

    • 一般val参数的值为0
    • 如果val参数为数值,填充的结果就是参数val
    • 如果val参数为数组或对象,填充的结果全部为0
    • 如果val参数为true,填充的结果全部为1
    • 如果val参数为false,填充的结果全部为0
    • 如果val参数为字符串,填充的结果全部为,每个字符串中的字符所对应的ascii表中的值,并且每个字符依次在length值内循环
  • 第二个参数和第三个参数可选

    • offset表示为起始位置写入,默认为0
    • end表示将数值写入到第几个字节处,默认为length的值

3.2 直接使用一个数组来初始化缓存区

var buf = new Buffer(['a', 'b', 'c']);console.log(buf)// result

3.3 直接使用一个字符串来初始化缓存区

var buf = new Buffer(str, [encoding])
  • 第一个参数str为初始化缓存区的字符串,第二个参数encoding用于指定文字编码格式的字符串,默认为utf8
  • 不同编码格式输出结果
var ascii = new Buffer('aLittleTea一点点', 'ascii');console.log('ascii  ', ascii);// result// ascii   
var utf8 = new Buffer('aLittleTea一点点', 'utf8');console.log('utf8 ', utf8);// result// utf8
var utf16le = new Buffer('aLittleTea一点点', 'utf16le');console.log('utf16le', utf16le);// result// utf16le
var ucs2 = new Buffer('aLittleTea一点点', 'ucs2');console.log('ucs2 ', ucs2);// result// ucs2
var base64 = new Buffer('aLittleTea一点点', 'base64');console.log('base64 ', base64);// result// base64
var binary = new Buffer('aLittleTea一点点', 'binary');console.log('binary ', binary);// result// binary
var hex = new Buffer('aLittleTea', 'hex');console.log('hex ', hex);// result// hex

4. 字符串的长度与缓存区的长度

在Node.js中,一个字符串的长度与根据该字符串所创建的缓存区的长度并不相同。因为在计算字符串的长度时,以位子作为一个单位,而在计算缓存区的长度时,以字节作为一个单位。
一个汉字字符串的长度为1,但是一个汉字在
Buffer缓存区中字节的长度为3,换句话说,在Node.js的
Buffer类中,一个汉字的字节长度为3
var chinese = '一点点奶茶有点儿好喝';var buf = new Buffer(chinese);console.log(buf);// result// 
console.log(chinese.length); // 10console.log(buf.length); // 30console.log(chinese[4]); // 茶console.log(buf[4]); // 130 注:在buf中编码为16进制,输出的结果是10进制 // 修改chinese的某一个字符chinese[4] = '昔';// 字符串对象一旦被创建,就不可以被修改console.log(chinese); // 一点点奶茶有点儿好喝// 修改buf的某一个字节buf[0] = 'e4';buf[1] = 'ba';buf[2] = '8c';console.log(buf)//
// 被修改的前三个字节全都是00

转载地址:http://kpwlo.baihongyu.com/

你可能感兴趣的文章
[LeetCode] Linked List Random Node 链表随机节点
查看>>
数据仓库专题(15)-数据仓库建设基本原则-实践篇(求补充)
查看>>
关于IoT网络的一些特征的探讨
查看>>
tkinter的GUI设计:界面与逻辑分离(一)-- 初次见面
查看>>
拓扑学中凝聚点的几个等价定义
查看>>
64.5. PHP mail()
查看>>
iOS微信6.5.19可生成自己的赞赏码
查看>>
你的GitHub Guides探险
查看>>
jsch上传文件功能
查看>>
iOS - Swift Closure 闭包
查看>>
新版 Edge 浏览器 Logo 曝光:形状相同,但为黄色背景
查看>>
Mac下遇到 'reading initial communication packet’ 问题
查看>>
手把手教你webpack3(10)Less-Loader配置简述
查看>>
Hadoop设置环境变量注意事项
查看>>
SAP MM Service Specification的使用?
查看>>
github优质图书
查看>>
第 35 章 dnsmasq
查看>>
武汉往事之借钱识朋友
查看>>
python中的文件操作
查看>>
ASM基本配置问题
查看>>