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. Entity Framework入门教程(9)---离线场景附加实体图集到上下文

    附加离线实体图集到上下文 这节主要内容是通过不同的方法将离线实体附加到上下文中. 在离线场景中,保存一个实体要略微困难一些.当我们保存一个离线的实体图集或一个单独的离线实体时,我们需要做两件事.首先, ...

  2. jQuery使用(十四):extend()方法

    浅层克隆 深层克隆 扩展方法 一.extend的基本使用 语法: $.extend( target [, object1 ] [, objectN ] ) $.extend( [deep ], tar ...

  3. GO 基础

    基本语法练习 打印 乘法表 package main import ("fmt") func main(){ for n:=1;n<=9;n++{ for m:=1;m< ...

  4. [物理学与PDEs]第5章习题2 Jacobian 的物质导数

    验证 (3. 6) 式, 即证明 $$\bex \cfrac{\rd J}{\rd t}=J\Div_y {\bf v}. \eex$$ 证明: $$\beex \bea \cfrac{\rd J}{ ...

  5. EffectiveC++ 第1章 让自己习惯C++

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 1 让自己习惯C++ 条款 1 :视 C++为一个语言 ...

  6. java8 list转map

    //按id属性为map的key值 Map<Integer, User> userMap = list.stream().collect(Collectors.toMap(User::get ...

  7. 原生js封装cookie获取、设置及删除

    使用cookie(key,value,options) 参数key,value,options(可选) function cookie(key,value,options){ if(typeof va ...

  8. day 14 - 2 生成器练习

    相关练习 1.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 #比较 low 的方法 def check_file(filename,aim): with open( ...

  9. mysql 分库分表 ~ 柔性事务

    一 定义 TCC方案是可能是目前最火的一种柔性事务方案二 具体 内容 TCC=try(预设)-confrim(应用确认)-canal(回滚取消)三 目的 解决跨服务调用场景下的分布式事务问题,避免使用 ...

  10. jsp注释<%-- --%>和<!-- -->的区别

    最近在写JSP页面注释的时候,遇到一个问题,在JSP页面引用的静态属性资源文件时,在浏览器控制台报错,当我把引用的标签注释掉后,用的是<!-- -->.然后浏览器仍然报了之前那个错,经过查 ...