互联网的基础是数据的传送,一切都围绕着数据展开,比如发送啊,接收啊,这一切都离不开网络,通过之前,学会了通过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 server数据库端口访问法

    最近数据库连接,也是无意中发现了这个问题,数据库可根据端口来连接 我用的是sql2014测试的,在安装其他程序是默认安装了sql(sql的tcp/ip端口为xxx),服务也不相同,但是由于比较不全,我 ...

  2. RobotFramework读取mysql和oracle数据库

    一.robotframework连接mysql数据库 1.安装databaselibrary.pymysql 通过cmd命令执行:pip install robotframework-database ...

  3. JavaSE---线程同步

    1.当多个线程同时访问同一个数据时,容易出现线程安全问题,必须进行线程同步: 2.解决方案: 1.1 Java的多线程引入了  同步监视器  ,使用同步监视器的通用方法就是  同步代码块 //线程开始 ...

  4. day06 - Python - 面向对象

    本节内容: 引子 面向对象 v.s. 面向过程 面向对象编程介绍 面向对象的特性:       封装       继承       多态 类.方法   1.引子 假设你现在是一家游戏公司的开发人员,现 ...

  5. jQuery 间歇式无缝滚动特效分享(三张图片平行滚动)

    最近项目中门户首页需要做出图片间歇式无缝滚动特效,但是在网上找资料都是不太理想,不过可以指导.最后自己写了一个demo实现了这个特效,分享出来. 1.jquery.cxscroll.js /*! * ...

  6. Spring自定义注解配置切面实现日志记录

    一: spring-mvc.xml: <!--配置日志切面 start,必须与mvc配置在同一个配置文件,否则无法切入Controller层--><!-- 声明自动为spring容器 ...

  7. js-对象的方法详解

    Object.prototype 上的方法: constructor 返回创建该对象的构造函数 var arr = []; arr.constructor == function Array() { ...

  8. 对数组排序进行"洗牌"(随机排序)

    这段代码在这里使用Fisher Yates洗牌算法给一个指定的数组进行洗牌(随机排序). function shuffle(arr) {     var i,        j,        tem ...

  9. OC跟Swift混编

    OC项目中使用Swift 本文版权归作者所有,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue  独立博客:http://mengxiangyue ...

  10. 跨平台图表控件TeeChart使用教程:将图表数据导出为XML格式

    在开发者使用TeeChart进行开发的过程中,不管是在设计时或者运行时都可以使用的图表导出对话框将图表数据轻易地导出为XML格式: TeeChart最新版那下载地址 上图为TeeChart导出对话框的 ...