Buffer实例

互联网的基础是数据的传送,一切都围绕着数据展开,比如发送啊,接收啊,这一切都离不开网络,通过之前,学会了通过http模块来搭建一个服务器,也实现了网络爬虫,nodejs中网络的部分,Net这个模块,对于Net这个模块,如果没有深入使用nodejs的话,很少注意他,但是他扮演着十分重要的作用,甚至熟悉的http,https模块都是建立在net这个模块的封装之上的,在学习Net之前,先花时间讲讲Buffer和Stream,因为网络的基础就是数据的传输和处理,在没有理解Buffer和Stream之前,尝试去理解Net这个模块,而忽略数据这些基础知识,走了不少弯路,
Buffer
直译的意思就是缓冲,在nodejs中用来处理二进制的数据,为什么要折腾buffer呢,因为js数据是以字符串utf-8数据格式存储的,处理二进制的能力是很弱的,而网络层不管对资源对处理还是响应都是使用二进制的,所以nodejs就有了这么一个接口,来创建一个专门处理二进制的这么一个缓存区,并提供一些方法来对这个缓存区的数据进行进一步的处理,Buffer在nodejs里面是可以全局访问的,不需要用require关键字来加载他,先了解一下buffer有哪些静态方法,然后再去了解他怎么去实例化,以及序列化后的对象上所有的属性和方法,

我们发现Buffer是一个对象,也是一个构造函数,具有自己的属性和静态方法,通过他new出来的一个实例,其他代表v8引擎分配的一段缓存,基本上是一个数组,成员也是整数值

我们new了一个Buffer的实例,传入一个参数,出来的是用Buffer包起来的一串字符,每个对应的就是字符的长度,比如H就是48,e就是65,空格就是20,注意,在Buffer对象与字符串相互转换的时候,是需要指定编码格式的,如果不指定,就是不传递编码格式的参数的话, 默认是按utf-8的形式进行转化,比如我可以按照base64来转化这个编码,

可以看到打印出来的长度已经短了很多,通过new的这种格式是可以直接实例化Buffer对象的,这算是一种实例化的方法,还有 第二种,就是传递一个size,以这个字节数为单位,传递参数给构造函数,来生成一段内存区间,比如

 这个Buffer的长度就是8,这种实例化的方法只是分配了一段内存区间,如果往里面写的内容超出长度的话,超出长度的部分是不会被缓冲的,

 可以看到打印出的Buffer,他的长度是8,从31到38,我们再来声明一个Buffer,声明长度7,写入长度8

 可以看到第8位已经没有掉了,那么就是说只要为某个buffer定义一个长度,超出掉部分就是不缓冲了

 
 
第三种实例化的方法,通过数组进行初始化

 用数组的方式实例化的buffer对象,也可以直接通过下标来访问数组里面的某一个值,

 

这里要留意一下,如果是小数点的这种,

再访问出来的就是一个整数的,所以这里就是直接取整

猜你喜欢

转载自www.cnblogs.com/wzndkj/p/9175921.html