Node.js_Buffer 缓冲区

摘要:
虽然JavaScript不支持任何操作,但没有二进制数据的本机节点引入了Buffer类。二进制数据的操作是V8引擎的扩展。事实上,这是内存的直接分配。每个元素的大小为1字节。创建缓冲区后,其大小是固定的。一旦将内容复制到缓冲区,它将以二进制形式存储。如果需要添加更多数据,则必须将旧缓冲区复制到更大的缓冲区。这是以牺牲一些程序员的开发便利性为代价的。计算机的工作原理是操作“开”和“关”状态。

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 个位
  • 一个字符,就是一个字节,方便数据的显示
  • Node.js_Buffer 缓冲区第1张
  • 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 缓冲区》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android屏幕density, dip等相关概念总结openlayers3入门教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

网络游戏的前后端通讯(一)

【旧博客转移 - 发布于2015年9月14日 22:25】   通讯是网络游戏的最重要部分之一,好的游戏通讯协议设计包括一下特点:包体积小、解析速度快、支持加解密等等,下面就简单说一下通讯协议的设计 1.游戏中常用的通讯协议以及数据格式 HTTP:     早期的SLG游戏一般会采用HTTP协议进行通讯,后端大多采用PHP,通讯格式用XML、JSON等字符...

[翻译]——MySQL Server Variable: sync_binlog (Doc ID 1501926.1)

  本文对MySQL Server Variable: sync_binlog (Doc ID 1501926.1)这篇文章进行了翻译,如有翻译不当或错误的地方敬请指正。     译文地址:https://www.cnblogs.com/kerrycode/p/14167941.html   In this Document Purpose Scope...

linux下的二进制文件的编辑和查看

linux下的二进制文件的编辑和查看 一、在Linux下查看二进制文件的软件: xxd (默认2进制) hexdump  (默认16进制,可转其他进制)  od (默认8进制,可转其他进制) 二、编辑: 1、biew 2、hexedit 3、vim Vim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读取一个文件,改动一个字符,...

mysql二进制日志

一、mysql的二进制日志文件 二、查看二进制日志文件信息:      1、查看二进制日志文件是否开启:show variables like 'log_bin';      2、查看所有二进制日志文件的列表:show binary logs;      3、查看当前二进制日志文件的名称(最后一个):show master status;      4、获...

java中表示二进制、八进制、十进制、十六进制

1.进制   进制是一种记数方式 ,可以用有限的数字符号代表所有的数值。由特定的数值组成。 2.进制的表现形式     二进制: 由0和1两个数字组成。  八进制: 由0-7数字组成,为了区分与其他进制的数字区别,开头都是以0开始。  十进制: 都是以0-9这九个数字组成,不能以0开头。   十六进制:由0-9和A-F组成。为了区分于其他数字的区别,开头都...

hessian协议原理

Hessian 原理分析 一. 远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络 IO ,主要有 bio 、 ni...