互联网的基础是数据的传送,一切都围绕着数据展开,比如发送啊,接收啊,这一切都离不开网络,通过之前,学会了通过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. Java 类型转换(int->String)

    1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  2. 线程池ThreadPoolExecutor分析: 线程池是什么时候创建线程的,队列中的任务是什么时候取出来的?

    带着几个问题进入源码分析: 1. 线程池是什么时候创建线程的? 2. 任务runnable task是先放到core到maxThread之间的线程,还是先放到队列? 3. 队列中的任务是什么时候取出来 ...

  3. junit使用中的一些问题

    之前开发过程中的测试,不是使用main方法,就是启动项目调用地址,尤其是后者,测试起来非常不方便,今天配置了下junit,中间遇到些问题,记录如下. 首先下载spring-test.jar包和juni ...

  4. Mybatis学习笔记16 - bind标签

    1.${}拼串进行模糊查询,不安全 示例代码: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; import java ...

  5. python 进程池Pool以及Queue的用法

    import os,time,random from multiprocessing import Pool def task(name): print('正在运行的任务:%s,PID:(%s)'%( ...

  6. Java基础03-类型转换

    1.自动转换 int->double char->String 例:double a=10; 2.强制类型转换 (类型名)表达式 注意:String不能强制转化为char public c ...

  7. shell脚本之文件测试操作符及整数比较符

    一.文件测试操作符: 在书写测试表达式是,可以使用一下的文件测试操作符. 更多的参数可以help test或者man bash 二.字符串测试操作符: 字符串测试操作符的作用:比较两个字符串是否相同. ...

  8. selinux下修改sshd端口号

    21 如果已开selinux,修改sshd配置文件  # vim /etc/ssh/sshd_config中的端口号后 重启SSH服务  # systemctl restart sshd.servic ...

  9. the wait queue

    using System; using System.Collections.Concurrent; using System.Threading; namespace Base { public c ...

  10. 权限修饰符(public、protected、default、private)权限验证

    一.测试方法 在authorityTest包中建类AuthorityValidate package authorityTest; public class AuthorityValidate { p ...