互联网的基础是数据的传送,一切都围绕着数据展开,比如发送啊,接收啊,这一切都离不开网络,通过之前,学会了通过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对象,也可以直接通过下标来访问数组里面的某一个值,

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

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

Buffer实例的更多相关文章

  1. 后端程序员之路 39、一个Protocol Buffer实例

    实际工作的Protocol Buffer使用经验 # 写proto文件- 协议版本 项目用的是protobuf2,所以要指定 syntax = "proto2";- 包名 pack ...

  2. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  3. 大熊君大话NodeJS之------Buffer模块

    一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...

  4. Nodejs Buffer

    javascript中的字符串本身就是以字符来存储,而非字节,下面的例子可以说明: console.log("0123456789".length); console.log(&q ...

  5. Node.js缓冲模块Buffer

    前言 Javascript是为浏览器而设计的,能很好的处理unicode编码的字符串,但对于二进制或非unicode编码的数据就显得无能为力. Node.js继承Javascript的语言特性,同时又 ...

  6. Buffer -nodejs

    纯 JavaScript 对 Unicode 友好但是无法很好地处理二进制数据.当我们面对类似 TCP 流或文件系统时,是需要处理八位流的.Node 有几种操作.创建以及消费八位流的策略.原始数据保存 ...

  7. 如何使用node中的buffer

    介绍:Buffer类是一个全局类,是一个比较罕见不需要require( ‘buffer’ )就可以使用的类,Buffer类似与数组也有length, 它里面的元素为16进制的两位数,即 0-255的数 ...

  8. Node.Buffer

    介绍 Buffer是一个典型的javascript与c++结合的模块,它将性能相关的部分用c++实现,将非性能相关的部分用javascript实现. 纯 JavaScript 对 Unicode 友好 ...

  9. NodeJS stream 一:Buffer

    当年是看了朴灵的九浅一深 NodeJS 入门的 Node, 朴大大的书讲实践很少更多的篇幅用在了讲原理上,道理听了那么多,后来开始在前端工程领域使用 NodeJS 却处处掣肘,总结原因发现 NodeJ ...

随机推荐

  1. SQL SEVER 数据库日志(Log)文件增长过快的处理

    SQL SERVER 2016数据库,50GB+的数据.有大量的增删和插入操作,数据库log文件变得异常的大,而且增长速度特别的快.周五log文件20GB,周一上班就成了200+GB了 因为数据库恢复 ...

  2. 关于imageview matrix

    Matrix 是 Android SDK 提供的一个矩阵类,它代表一个 3 X 3 的矩阵 那么这 9 个浮点数的作用和意义是什么呢,从 Android 官方文档上看,它为这个数组中的每一个元素都定义 ...

  3. IE7+ 浏览器兼容预览本地图片

    css #preview_fake { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale); o ...

  4. Murano Weekly Meeting 2015.08.04

    Meeting time: 2015.August.4th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting summa ...

  5. (转) IP子网划分

    原文:http://blog.csdn.net/birdie_l/article/details/77994610  子网划分公式计算法 实例一 实例二 心算思路总结: B类公式算法举例: 总结:此表 ...

  6. (转)shell中各种括号的作用()、(())、[]、[[]]、{}

    shell中各种括号的作用().(()).[].[[]].{} 原文:http://www.jb51.net/article/60326.htm http://blog.csdn.net/good_h ...

  7. SmartRF Flash Programmer突然打不开显示界面的办法【亲测有效】

    在尝试打开任务管理器结束任务之后重新打开依然无果,在尝试了SmartRF Flash Programmer卸载重装无数次之后依然无果的况状,我被SmartRF Flash Programmer存在界面 ...

  8. container_of 和 offsetof 宏详解

    在linux内核链表中,会遇到两个宏. 在include/linux/stddef.h中,有这样的定义 #define offsetof(TYPE, MEMBER) ((size_t) &(( ...

  9. Oracle之RMAN备份及还原

    RMAN可以进行增量备份:数据库,表空间,数据文件 只有使用过的block可以被备份成backup set 表空间与数据文件对应关系:dba_data_files / v$datafile_heade ...

  10. Session [php]

    1.启动会话 session_start() 通过session_register()函数创建会话 session_register()函数用来为会话登录一个变量来隐含地启动会话,但要求php.ini ...