(一)Buffer (缓冲区)

1. Buffer 的结构和数组很像,操作的方法也和数组类似

为什么有数组了还要新发明一个Buffer呢?

(1)数组是js语法,js代码性能较差

(2)数组中可以存的数据类型有限,传统的数组不能满足服务端所需的数据类型的需求,比如音频、视频、图片等二进制文件,而Buffer就是专门用来存储二进制文件的

(3) 使用Buffer不需要引入模块,直接用即可

(二)代码演示

1. 将一个字符串保存在Buffer

Buffer.from 语法

var str = 'test'
var buf = Buffer.from(str)
console.log(buf) // <Buffer 74 65 73 74>
console.log(buf.length) // 4

根据结果可以看出

// 74 -> t
// 65 -> e
// 73 -> s
<Buffer 74 65 73 74>
// 一个映射

在 Buffer 中存储的都是二进制(数据在传输中二进制传输)~但是在显示时都是以16进制去显示

2. buffer中每一个元素的范围是从 00000000 --- ffffffff

计算机中一个0或者1个1,我们成为1位(bit)

8bit = 1byte (字节)  8位等于一个字节

buffer 中的一个元素,占用一个字节,字节是计算机传输中的最小单位

所以 test 占用 4 个字节

3. 1024byte = 1 KB

1024KB = 1 mb

1024mb = 1gb

1024ng = 1tb

4. buffer.length 表示占用内存的大小

var str = '我是周芳冰'
var buf = Buffer.from(str)
console.log(buf)
console.log(buf.length)// 结果
<Buffer e6 88 91 e6 98 af e5 91 a8 e8 8a b3 e5 86 b0>
15

一个汉字占用 3 个字节!!一个英文占用一个字节

5. 创建一个制定大小的Buffer

Buffer.alloc

var buffer = Buffer.alloc(10)
console.log(buffer.length) // 10
console.log(buffer) // <Buffer 00 00 00 00 00 00 00 00 00 00>
// 赋值
buffer[0] = 88
buffer[1] = 255
console.log(buffer) // <Buffer 58 ff 00 00 00 00 00 00 00 00>

赋值会转成16进制

注意:Buffer 的内存如果一旦确定,不可以更改

buffer[11] = 12
console.log(buffer) // <Buffer 58 ff 00 00 00 00 00 00 00 00>

一共10内存,索引到9,索引11赋值,不能赋值成功

6. Buffer的大小一旦确定,则不能够修改,Buffer实际上是对底层内存的实际操作,Buffer 的内存一定是连续的

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 556
buffer[3] = 12
console.log(buffer) // <Buffer 58 2c 00 0c 00 00 00 00 00 00>

最大值 255,556大于255,会转成16进制后截断,转成截断之后的

7. 获取Buffer

Buffer 的值只要在控制台或者页面中输出,一定是10进制

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 56
buffer[2] = 0xaa
buffer[3] = 12
console.log(buffer[2]) // 170

一定以10进制输出

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 56
buffer[2] = 0xaa
buffer[3] = 12
console.log(buffer[2].toString(16)) // aa

调用字符串,可以转化为想要的

8. 循环

var buffer = Buffer.alloc(10)
// 赋值
buffer[0] = 88
buffer[1] = 56
buffer[2] = 0xaa
buffer[3] = 12
for (var i = 0; i < buffer.length; i++) {console.log(buffer[i])
}// 输出
88
56
170
12
0
0
0
0
0
0

9. 将16进制解码

var buffer = Buffer.from('我是zfb')
console.log(buffer.toString()) // 我是zfb

这就是Buffer常用的几个API,目前只是初探,用法和用途以后了解~

(四)Buffer 缓冲区相关推荐

  1. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块

    node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...

  2. node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块

    node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...

  3. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  4. JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发

    文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...

  5. Node.js Buffer(缓冲区)

    一.Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了 ...

  6. 95-50-040-java.nio.channels-NIO-NIO之Buffer(缓冲区)

    1.世界 Java NIO之Buffer(缓冲区) Buffer(缓冲区)介绍 Java NIO Buffers用于和NIO Channel交互. 我们从Channel中读取数据到buffers里,从 ...

  7. (四)Netty之Buffer缓冲区

    基本介绍 缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松地使用内存块,缓冲区对象内置了一些机智,能够跟踪和记录缓冲 ...

  8. Java NIO ———— Buffer 缓冲区详解

    引言 缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存 ...

  9. Buffer缓冲区的相关操作

    目录 一.什么是Buffer? 二.buffer的创建 1.alloc 2.allocUnsafe 3.from 三.Buffer的操作 1.Buffer与字符串的转换 2.Buffer的读写 四.B ...

  10. 【基础巩固篇】Java中的Buffer缓冲区探究

    作者:不清不慎,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! 一.什么是缓冲区,与缓存的区别? 首先简单的说下什么是缓存,缓冲的目的的是用来缓解应用程序上下层之间的性能差异,从 ...

最新文章

  1. idea 查看一个类的子类_Java-05-多态、抽象类、接口和内部类
  2. js 字符串加减法_JavaScript (+) 加法运算符
  3. Idea——Tomcat 报错——Warning: No artifacts configured 解决方法
  4. java培训第一阶段测试总结,达内学员Java培训阶段总结:反躬自省,愈渐完美
  5. MOXy是GlassFish 4中新的默认JSON绑定提供程序
  6. oracle 添加默认值列,Oracle 11g增加列,并带默认值的新特性
  7. 解析几何 | 吕子根 设三平行平面 $\pi_i:\ Ax+By+Cz+D_i=0\,(i=1,2,3),L,M,N$ 依次是平面 $\pi_1,\pi_2,\pi_3$ 上的任意点,求 $\tria
  8. typecast java_Delphi设置无效的Typecast
  9. 关于 Matlab R2014a下载与安装流程
  10. 电信天翼网关接不上服务器无信号咋小,天翼网关有wifi信号,但不能上网的问题汇总解答...
  11. 国家互联网信息办公室公布《互联网新闻信息服务单位内容管理从业人员管理办法》【软件网每日新闻播报│第10-31期】
  12. 计算机毕业设计选题建议
  13. 【系统架构】-如何评估软件架构
  14. Python_变量声明
  15. 【区块链技术与应用】(三)
  16. mui上拉加载不好使
  17. e盘不见了怎么恢复?可以这样找回!
  18. Linux 您未安装Flash Player 或者版本过低
  19. 基于uni-app的安卓在线考试系统软件设计
  20. (筆記) t_vpi_value struct (SOC) (Verilog PLI)

热门文章

  1. 云通讯 发送短信模板代码
  2. 局域网即时通讯Active Messenger 完美破解版本 最新版本破解
  3. day02 约束、数据库设计、多表查询、事务
  4. Swift网络请求 - RXSwift + PromiseKit + Moya
  5. 新能源汽车,不需要“共享充电宝”
  6. ubuntu 刷新频率 如何查看_Ubuntu Linux系统屏幕刷新率问题的解决
  7. python裁剪图片并保存
  8. 解析2019年新零售社区团购发展方向
  9. Matlab求集合交集和并集
  10. 50 条有趣的 Python 一行代码,建议收藏夹吃灰