什么是buffer?
Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的、且在 V8 堆外分配物理内存。 Buffer 的大小在被创建时确定,且无法调整。
Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require('buffer').Buffer。
#什么是buffer 缓冲区Buffer 是暂时存放输入输出数据的一段内存 js语言自身只有字符串数据类型,没有二进制数据类型,而处理TCP和文件流的时候,必须处理二进制数据 nodejs提供了一个Buffer对象来提供对二进制数据的操作 是表示固定内存分配的全局对象,也就是说要放到缓存区中的字节数据需要提前确定 Buffer好比由一个八位字节组成的数组,可以有效的在javascript中存储二进制数据 #什么是八位字节? 字节byte是计算机存储时的一种计量单位,一个字节表示8位二进制数 一个位就代表一个0或1,每8各位(bit)组成一个字节(byte) 字节是网络传输信息的单位 一个字节最大值十进制表示是255 1 1 1 1 1 1 1 1 2的8次方减1 一个单词是两个字节 ASCII 码使用指定的7位或8位二进制数组合来表示128或256种可能的字

# 定义buffer的三种方式
编码是做翻译用的
他是一个全局对象,不需要require和引用,里面存储的是二进制数字节 第一种方式 new Buffer(size) size 是多少个字节,类似于数组中的length 例:var buffer = new Buffer(1);//buffer的长度是1 ,长度固定之后不可以改变
buffer[0] = 16;
console.log(buffer); //<Buffer 0e>
buffer[1] = 16;//长度固定之后不可以改变
console.log(buffer);//<Buffer 0e>
第二种方式 数组创建 new buffer(Array); 例: var bufferArr = new Buffer([1,2,3]);//数组的长度就是buffer的长度
console.log(bufferArr); // <Buffer 01 02 03>
第三种方法 字符串创建 new Buffer(str,[encoding]); 例:var bufferStr = new Buffer('刘'); //一个汉字是三个字节
console.log(bufferStr);//<Buffer e5 88 98> #Buffer和字符串之间的转换 字符串转换成Buffer
var bufStr = new Buffer('刘诗雨');
console.log(bufStr);
//<Buffer e5 88 98 e8 af 97 e9 9b a8>
Buffer转字符串 bufStr.toString('utf8');
console.log(
bufStr.toString('utf8')
);
//刘诗雨 #Buffer的常用方法 1.合并Buffer Buffer.concat(list[, totalLength])
var buf1 = new Buffer(1);
buf1[0] = 1;
var buf2 = new Buffer(2);
buf2[0] = 2;
buf2[1] = 3;
var hebing = Buffer.concat([buf1,buf2]);//<Buffer 01 02 03> 默认不写的话是两个buffer合起来的长度
hebing = Buffer.concat([buf1,buf2],3);//<Buffer 01 02 03>
hebing = Buffer.concat([buf1,buf2],2);//<Buffer 01 02>如果长度小于两个buffer之和的长度则是几就留几个
hebing = Buffer.concat([buf1,buf2],5);//<Buffer 01 02 03 00 00> 如果长度大于两个buffer之和的长度则后面的补0 2. 复制 buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
var buf11 = new Buffer('刘');
var buf12 = new Buffer('诗');
var buf13 = new Buffer('雨');
var buffers = new Buffer(12);
buf11.copy(buffers,0,0,3);
console.log(
buffers.toString('utf8',0,3)
);//刘
buf12.copy(buffers,3,0,3);
console.log(
buffers.toString('utf8',0,6)
);//刘诗
buf13.copy(buffers,6,0,3);
console.log(
buffers.toString('utf8',0,9)
);//刘诗雨 3.判断是否是Buffer.isBuffer console.log(
Buffer.isBuffer(
buffers)
); //true 4.获取字节的长度 Buffer.byteLength
console.log(Buffer.byteLength('刘诗雨'));//9 一个汉字是三个字节 一个英文字符是一个字节
什么是buffer?的更多相关文章
- Node.js:Buffer浅谈
Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...
- java.IO输入输出流:过滤流:buffer流和data流
java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...
- 一点公益商城开发系统模式Ring Buffer+
一个队列如果只生产不消费肯定不行的,那么如何及时消费Ring Buffer的数据呢?简单的方案就是当Ring Buffer"写满"的时候一次性将数据"消费"掉. ...
- CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总
CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总 开始 总的来说,OpenGL应用开发者会遇到为如下三种数据创建Vertex Buffer Object的情形: ...
- golang bytes.Buffer Reset
func t() { a := []'} buf := new(bytes.Buffer) buf.Write(a) b := buf.Bytes() fmt.Println(b) buf.Reset ...
- 使用Ring Buffer构建高性能的文件写入程序
最近常收到SOD框架的朋友报告的SOD的SQL日志功能报错:文件句柄丢失.经过分析得知,这些朋友使用SOD框架开发了访问量比较大的系统,由于忘记关闭SQL日志功能所以出现了很高频率的日志写入操作,从而 ...
- directx12中vetex buffer、index buffer和constant buffer绑定piple line的时机
类别 时机 函数 建Heap vetex buffer 在Draw函数中 ID3D12GraphicsCommandList::IASetVertexBuffer 否 index buffer 在Dr ...
- JAVA NIO Buffer
所谓的输入,输出,就是把数据移除或移入缓冲区. 硬件不能直接访问用户控件(JVM). 基于存储的硬件设备操控的是固定大小的数据块儿,用户请求的是任意大小的或非对齐的数据块儿. 虚拟内存:使用虚 ...
- Circular Buffer
From:http://bradforj287.blogspot.com/2010/11/efficient-circular-buffer-in-java.html import java.util ...
- Buffer类
输入流中可以通过缓冲区来加大读取的效率,sun公司感觉可以加快执行效率,他就为我们提供了一个类来操作缓存区. Buffer来头的类:所有缓冲流都是以Buffer开头的: 学习缓冲流的作用: Buffe ...
随机推荐
- 2019-08-10 纪中NOIP模拟B组
T1 [JZOJ1235] 洪水 题目描述 一天, 一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的. 森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示 ...
- 常用excel函数公式及操作示例
一.数字处理 1.取绝对值 =ABS(数字) 2.取整 =INT(数字) 3.四舍五入 =ROUND(数字,小数位数) 二.判断公式 1.把公式产生的错误值显示为空 公式:C2 =IFERROR(A2 ...
- Roles in graphs
related website: Beyond Community Detection - RolX; ReFeX and RolX ; What are roles? “Functions” of ...
- zookeeper入门之介绍与安装
一:zookeeper是什么 What is ZooKeeper? ZooKeeper is a centralized service for maintaining configuration i ...
- MySQL起别名
好处: 便于理解 连接查询的时候,如果要查询的字段有重名的情况,使用别名可以区分开来 注意: 如果别名中有特殊符号 # 空格 ... ,需要用 "双引号" 把别名引起来单引号也行, ...
- 银行业务队列简单模拟(队列queue)
设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列 ...
- MySQL数据库 | 数据库和数据表的基本操作
第一篇博文,一个小小的纪念仪式^-^ 以下正文 一.数据库的基本操作 --数据库的操作 --连接数据库 mysql -uroot -p密码 mysql -uroot -pmysql --退出数据库 e ...
- 数据结构学习笔记 <1> 线性表
一.线性表的抽象数据类型描述 类型名:线性表(List) 数据对象集:线性表示n(>=0)个元素构成的有序序列(a1,a2,……,an) 操作集:线性表L∈List, 整数i表示位置,元素X∈ ...
- Linux - Shell - cut: 低配 awk
概述 简述 shell 命令行工具 cut 背景 偶尔需要用 awk 来筛选特定的列 awk 很是强大 但是强大的背后, 却伴随着复杂 其实同样的功能, awk 也没有复杂多少 如果是 简单的任务, ...
- 牛客竞赛第二场D Kth Minimum Clique 贪心+bitmap
Kth Minimum Clique 题意 给出n(n<100)个点的邻接表,和n个点的权值,求第k大的团(完全子图) 分析 n很小,并且好像没有什么算法和这个有关系,所以可以往暴力枚举的方向想 ...