(四)Buffer 缓冲区
(一)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 缓冲区相关推荐
- node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块
node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...
- node事件循环 EventEmitter 异步I/O Buffer缓冲区 模块
node.js事件循环 node.js单进程,单线程的程序 每一个api都支持回调 所有的事件机制都是设计模式中的 一共是23种设计模式 http://design-patterns.readthed ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 //高并发
文章目录 二 Java NIO (一)NIO对比OIO (二)概述三个核心组件 Channel通道 Selector选择器 Buffer缓冲区 (三)Buffer详解 1 Buffer类 2 四个属性 ...
- Node.js Buffer(缓冲区)
一.Node.js Buffer(缓冲区) JavaScript 语言自身只有字符串数据类型,没有二进制数据类型. 但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了 ...
- 95-50-040-java.nio.channels-NIO-NIO之Buffer(缓冲区)
1.世界 Java NIO之Buffer(缓冲区) Buffer(缓冲区)介绍 Java NIO Buffers用于和NIO Channel交互. 我们从Channel中读取数据到buffers里,从 ...
- (四)Netty之Buffer缓冲区
基本介绍 缓冲区(Buffer):缓冲区本质上是一个可以读写数据的内存块,可以理解成是一个容器对象(含数组),该对象提供了一组方法,可以更轻松地使用内存块,缓冲区对象内置了一些机智,能够跟踪和记录缓冲 ...
- Java NIO ———— Buffer 缓冲区详解
引言 缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存 ...
- Buffer缓冲区的相关操作
目录 一.什么是Buffer? 二.buffer的创建 1.alloc 2.allocUnsafe 3.from 三.Buffer的操作 1.Buffer与字符串的转换 2.Buffer的读写 四.B ...
- 【基础巩固篇】Java中的Buffer缓冲区探究
作者:不清不慎,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! 一.什么是缓冲区,与缓存的区别? 首先简单的说下什么是缓存,缓冲的目的的是用来缓解应用程序上下层之间的性能差异,从 ...
最新文章
- idea 查看一个类的子类_Java-05-多态、抽象类、接口和内部类
- js 字符串加减法_JavaScript (+) 加法运算符
- Idea——Tomcat 报错——Warning: No artifacts configured 解决方法
- java培训第一阶段测试总结,达内学员Java培训阶段总结:反躬自省,愈渐完美
- MOXy是GlassFish 4中新的默认JSON绑定提供程序
- oracle 添加默认值列,Oracle 11g增加列,并带默认值的新特性
- 解析几何 | 吕子根 设三平行平面 $\pi_i:\ Ax+By+Cz+D_i=0\,(i=1,2,3),L,M,N$ 依次是平面 $\pi_1,\pi_2,\pi_3$ 上的任意点,求 $\tria
- typecast java_Delphi设置无效的Typecast
- 关于 Matlab R2014a下载与安装流程
- 电信天翼网关接不上服务器无信号咋小,天翼网关有wifi信号,但不能上网的问题汇总解答...
- 国家互联网信息办公室公布《互联网新闻信息服务单位内容管理从业人员管理办法》【软件网每日新闻播报│第10-31期】
- 计算机毕业设计选题建议
- 【系统架构】-如何评估软件架构
- Python_变量声明
- 【区块链技术与应用】(三)
- mui上拉加载不好使
- e盘不见了怎么恢复?可以这样找回!
- Linux 您未安装Flash Player 或者版本过低
- 基于uni-app的安卓在线考试系统软件设计
- (筆記) t_vpi_value struct (SOC) (Verilog PLI)