Nodejs中的Buffer

        不记得第一次听到Buffer这个词是在什么情况下了,当时让师傅给我解释的时候,他只给了我三个词:缓冲区二进制读与写。用一句话形容就是,Buffer是一块可以以二进制写入和读取数据,并提供了一组方法进行操作的缓冲区。大概明白了是这个意思,但是并不知道在node中怎样使用它,也不了解它能在项目中产生什么样的作用,正好Scott的课程也讲到了Buffer,那就来深入了解一下吧。

        为什么要使用buffer呢?因为javascript中的字符串是以utf-8的格式存储的,处理二进制的能力很弱,而网络层对于不同资源的请求和响应都是用二进制的形式来交互的。

一、实例化Buffer

        Buffer在node里面是可以直接访问的,不需要使用require来引入。在node模式下输入Buffer,如下图。我们可以发现,Buffer是个对象,也是一个构造函数,具有自己的属性和静态方法。



        poolSize表示内存载体的容量。

        isBuffer判断当前对象是否是buffer对象。

        compare用来判断两个buffer对象的相对位置,一般来做按字符串的排序。

        isEncoding用来判断buffer是否支持某种编码。

        concat用于将几个buffer对象连接成一个新的buffer对象。

        byteLength用于获得指定编码下字符串所占的字节数,中文字符是3个字节。


        通过Buffer new出来的实例实际代表了一段内存,是一个成员为整数值的数组。在Buffer对象与字符串相互转化的时候,是需要指定编码格式的,如果不指定,默认是utf-8的格式转化的,如下图。


        此外,也可以给Buffer指定长度,分配一段内存区间,如果写入的内容超出长度,超出的部分是不会被缓冲的,如下图,末尾的9是没有被缓冲的。


        如果是用数组实例化的Buffer对象,我们可以用下标来访问其中的某个值。但如果数组的值是小数,我们获取时,返回的值会取整,如下图。


二、Buffer的使用

        除了上面例子中使用的buffer方法,还有其他实例方法,用于对二进制数据进行操作,和js中对数组的操作类似。


       buffer一旦被实例化,长度是固定了的,超出的部分不会写入,缺少的部分会使用原来的数据补全。

copy方法

        buffer.copy(target, tStart, sStart, sEnd = buffer.length)

        target-必需,复制的目标buffer;

        tStart-默认0,目标buffer中从第几个字节开始写;

        sStart-默认0,从原始buffer中获取数据的初始位置;

        sEnd-默认原始buffer对象的长度,从原始buffer中获取数据的结束位置


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值