buffer小解
Buffer代表一个缓冲区,存储二进制数据,是字节流
创建:
创建Buffer有4种方式:
1.new Buffer(size) 以字节为单位创建指定大小的Buffer
eg: var buf= new Buffer(10);
注: 此方法创建的缓冲区在未初始化时内部数据随机,什么数据都可能有
2.new Buffer(array) 使用字节数组来创建Buffer
eg: var buf1= new Buffer([1, 2, 3]); var buf2= new Buffer([0x01, 0x45, 0x78]);
注: 字节数组可为二进制,十进制,16进制等,16进制以0x或0X开头,内容从0~255(一个字节最大255)
3.new Buffer(str[,encoding]) 使用字符串,按照指定的编码方式创建,默认utf-8
eg: var buf3= new Buffer("aa", "utf-8");
注: 编码方式可为: ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex
4.new Buffer(buf) 按照buf实例创建一个buf,相当于复制
eg: var buf4= new Buffer(buf1);
--------------------------------------------------------------------------------------------------------------------------------------------------
写入:
buf.write(string[, offset][, length][, encoding])
按照指定的编码方式在指定位置写入指定长度
offset默认为0,encoding默认utf-8
----------------------------------------------------------------------------------------------------------------------------------------------------
读取:
1.下标读取:(类似于数组)
var buf= new Buffer(10); console.log(buf[1]);
2.buf.toString([encoding[, start[, end]]]);
按照指定方式在指定起始位置读取,并返回读取到的字符的长度
start默认0, end默认结束位置
eg: buf.toString('ascii', 1, 8);
3.buf.toJSON()
将Buffer对象转变为JSON格式,与JSON.stringify()类似
eg:
var buf1 = new Buffer('1234');
console.log(buf1.toJSON());
console.log(JSON.stringify(buf1));
输出:
可以看出buf.toJSON() 与JSON.stringify()功能类似,只是一个有双引号,一个没有
---------------------------------------------------------------------------------------------------------------------------------------------------
切片, 拷贝, 拼接:
buf.slice([start[, end]])对缓存区本身进行切片处理
buf.copy(targetBuffer[, targetStart][, sourceStart][, sourceEnd])
targetStart, sourceStart默认为0,sourceEnd默认源缓冲区的结束位置,实际操作按目标缓冲区,源头缓冲区的大小来
concat(list[,totalLength]) list为缓冲区列表,totalLength为生成的新缓冲区的总长度
--------------------------------------------------------------------------------------------------------------------------------------------------
对比:
buf.equals(otherBuffer) 判断两个缓冲区是否相等,相等时返回true
var buf1 = new Buffer('aaa1');
var buf2 = new Buffer('a1aa');
console.log(buf1.equals(buf2)); //false
可看出 equals需要两个缓冲区完全相等
buf.compare(otherBuffer) 判断两个缓冲区的大小,表示 buf 在 otherBuffer 之前,之后或相同,之前返回-1,之后返回1,相等返回0
-----------------------------------------------------------------------------------------------------------------------------------------------------
填充:
buf.fill(value[, offset][, end]) 使用指定的 value 来填充这个 buffer。如果没有指定 offset (默认是 0) 并且 没有end (默认是 buffer.length) ,将会填充整个buffer。
eg:
var buf = new Buffer('ABCD');
buf.fill(0);
console.log(buf);
console.log(buf.toString());
输出:
可见完全被填充,其中fill(0)实际运用中使用甚广,用于清除buffer内乱七八糟的数据,然后写入想写入的值,使用toString时便不会有以外的读取结果
buffer小解的更多相关文章
- innodb buffer pool小解
INNODB维护了一个缓存数据和索引信息到内存的存储区叫做buffer pool,他会将最近访问的数据缓存到缓冲区.通过配置各个buffer pool的参数,我们可以显著提高MySQL的性能. INN ...
- body-parser小解
body-parser用来解析http请求体,对不同的content-type有不同的处理方式, 首先介绍一下常见的四种Content-Type: 1.application/x-www-form-u ...
- 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 ...
随机推荐
- 1. LAMP----PHP开发环境搭建(Win)
LAMP=Linux+Apache+MySQL+PHP. Step1 安装Apache http://httpd.apache.org/download.cgi 1.打开上面网址->点击File ...
- CentOS 7将Python 2.X.X升级到Python 3.X.X
# cd /usr/local/src/ # ls Python-.tgz # .tgz # ls Python- Python-.tgz # cd Python-/ # yum install gc ...
- Java 序列化 JDK序列化总结
Java 序列化 JDK序列化总结 @author ixenos Java序列化是在JDK 1.1中引入的,是Java内核的重要特性之一.Java序列化API允许我们将一个对象转换为流,并通过网络发送 ...
- [河南省ACM省赛-第三届] BUYING FEED (nyoj 248)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> us ...
- netty初探(2)
上一篇 netty(1) 一.TCP/IP 流式传输 在上文演示了2进制流式传输引起的TCP拆包问题,这里继续演示文本型的传输问题,文本型的可以有以下几种策略 1.1 以特殊字符表示结尾 HTTP协议 ...
- Tiny6410之LED裸机驱动
操作步骤: 第一步:查看开发板电路原理图 找到LED 的管脚所对应的寄存器 nLED_1 - GPK4 nLED_2 - GPK5 nLED_3 - GPK6 nLED_4 - GPK7 由原理图可知 ...
- javascript 局部变量和全局变量
刚开始学js,遇到了一个奇怪的问题,查找之后知道了答案 需要记住两句话 1 Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分).切记,是f ...
- Gym 101102B The Little Match Girl(贪心+规律)
这个题目的做法不止一种,solve1:每个数字使用的火柴棒都在2~7之间,而且是连续的,就是2-7之前没有空着的数.这样就有一个结论,在下界为l,上界为r的情况下,假设有n个数,那么火柴棒总数一定在n ...
- node读写json文件(进阶)
该方法可用于修改配置文件,直接上代码 fs.readFile('test1.json','utf8',function (err, data) { if(err) console.log(err); ...
- 整屏滚动效果 jquery.fullPage.js插件+CSS3实现
最近很流行整屏滚动的效果,无论是在PC端还是移动端,本人也借机学习了一下,主要通过jquery.funnPage.js插件+CSS3实现效果. 本人做的效果: PC端:http://demo.qpdi ...