Buffer 缓冲区

虽然 JavaScript 支持未操作,但是并没有 二进制数据 的原生

node 引入了 Buffer 类,用于操作二进制数据

是 V8 引擎的扩展,实际上是对内存的直接分配

每个元素大小是 1 字节

创建了一个 Buffer 后,它的大小就固定了

一旦你把内容复制到一个 Buffer 后,它就会以二进制的形式存储起来。

如果你需要添加更多的数据,就必须把 老的 Buffer 复制到一个更大的 Buffer 中

这是为了性能而牺牲了一些程序员的开发便利

计算机的工作原理是操作“开”和“关”状态。

因为只有这样两种状态,所以我们称此为二元状态直接操作二进制通常是最快的方法。

在网络协议中,通常会指定一些字符来传达信息

比如用固定位置上的比特来表示特殊的含义

在 DNS 请求中,头两个字节表示的数字是事务 ID,下一个字节的每个比特都是独立使用的,

每一位表示了在这个请求中是否使用 DNS 的某个功能

1. 基本使用

  • 创建一个 Buffer
  • let aBuf = Buffer.alloc(参数);
  • 不安全,可能包含旧数据,需要重写所有数据
  • let bBuf  = Buffer.allocUnsafe(参数);
  • 不安全,可能包含旧数据,需要重写所有数据

可以使用 3 种参数

  • 指定 Buffer 的字节长度
  • 需要拷贝到 Buffer 里的字节数组
  • 需要拷贝到 Buffer 里的字符串
  • console.log() 打印时,以 16 进制显示
  • 一个数据,就是一个字节,就是 8 个位
  • 一个字符,就是一个字节,方便数据的显示
  • Buffer 保存 3 个字符(比如 RGB 颜色值)
  • let aColor = new Buffer([255,0,149]);    // <Buffer ff 00 95>
  • 获取 Buffer 长度

aBuf.length

  • 填充 Buffer 内容

var cBuf = Buffer.allocUnsafe(10);

cBuf.fill(0);

  • 将 字符串 转换为 Buffer

var bufStr = Buffer.from('Hello Bat-Man');

// <Buffer 48 65 6c 6c 6f 20 42 61 74 2d 4d 61 6e>

一个中文占用 3 个字节

var hanZi = Buffer.from('绿巨人');

// <Buffer e7 bb bf e5 b7 a8 e4 ba ba>

  • 将 Buffer 转换为 字符串

var strBuf = bufStr.toString();

// 'haha'

5

5

5

5

5

5

5

5

5

5

55

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

Node.js_Buffer 缓冲区的更多相关文章

  1. Node.js学习系列1

    概述 最近在刷javascript的技能,觉着nodejs是个不错的入口,作为一个.Net平台的前端工程师学习使用js开发服务端,想想都有点小激动哈哈^_^^_^. 入门 之前开发过ionic,所以对 ...

  2. node入门学习(一)

    一.安装node.js 方式很多npm,git等,新手建议从官网上直接去下载node的安装包.一键安装. 二.创建一个web服务器. const http = require('http'); htt ...

  3. STL源代码剖析 容器 stl_deque.h

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie deque ---------------------------------------- ...

  4. 《STL源代码剖析》---stl_deque.h阅读笔记(2)

    看完,<STL源代码剖析>---stl_deque.h阅读笔记(1)后.再看代码: G++ 2.91.57,cygnus\cygwin-b20\include\g++\stl_deque. ...

  5. babeljs源码

    babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...

  6. Node.js Buffer(缓冲区)

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...

  7. 8、Node.js Buffer(缓冲区)

    内容:Buffer与字符编码,Buffer创建.写入.读取.转换成JSON对象.合并.比较.拷贝.裁剪.长度 Buffer 与字符编码Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 . ...

  8. 【node.js】Buffer(缓冲区)

    Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区. 创建 Buffer 类 Node Buffer 类可以通过多种方式来创建. 1.创建长度为 10 字节的 ...

  9. Node.js:Buffer(缓冲区)介绍及常用方法

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门 ...

随机推荐

  1. 把 Nginx 创建为 Windows 的一个服务

    译序:Nginx 不是为 Windows 而写.Nginx 是用在软件的工作环境中的.但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows ...

  2. Generator和Coroutine学习

    简单的生产者消费者模型 #!/usr/bin/python2.7 def consumer(): while True: newn = yield print 'Consumer : {}'.form ...

  3. CentOS7.3安装VirtualBox

    安装 DKMS.更新内核 # yum -y install gcc make glibc kernel-headers kernel-devel dkms Installed:   dkms.noar ...

  4. densenet 中的shortcut connection

    DenseNet  在FCN 网络中考虑加入skip connection,在resnet 中加入identity 映射,这些 shortcut connection等结构能够得到更好的检测效果,在d ...

  5. Codeforces 1101G(线性基)

    题目链接 题意 将序列尽可能分成多段使得任意$x \geq 1$段内的所有元素的异或和大于$0$问最多多少段 思路 首先,如果所有元素异或和等于$0$答案显然为$-1$,否则构造整个序列的线性基,这个 ...

  6. Coursera, Big Data 3, Integration and Processing (week 5)

    Week 5, Big Data Analytics using Spark     Programing in Spark   Spark Core: Programming in Spark us ...

  7. 版本控制工具 - TortoiseSVN

    版本控制工具 - TortoiseSVN 使用SVN需要安装三个软件,Visual SVN Server是用于存储项目仓库的中央服务器,Tortoise SVN是管理版本控制的软件,Visual SV ...

  8. sublim 插件

    sublim 插件 https://www.cnblogs.com/hykun/p/sublimeText3.html html 代码自动 + tab ul>li>img+p+a ! ul ...

  9. vs查找功能不显示查找结果

    今天打开vs,查找的时候发现查找结果窗口不出现了,导致看不到查找结果. 网上各种搜索,甚至看到不少说什么要重装vs的解决方案,我也是醉了...... 其实解决办法很简单啊 vs--窗口--重置窗口布局 ...

  10. python数据类型一:字符串

    Python 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello W ...