buffer小解

时间:2022-12-22 08:26:12

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));

输出:

buffer小解

可以看出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());

输出:

buffer小解

可见完全被填充,其中fill(0)实际运用中使用甚广,用于清除buffer内乱七八糟的数据,然后写入想写入的值,使用toString时便不会有以外的读取结果

buffer小解的更多相关文章

  1. innodb buffer pool小解

    INNODB维护了一个缓存数据和索引信息到内存的存储区叫做buffer pool,他会将最近访问的数据缓存到缓冲区.通过配置各个buffer pool的参数,我们可以显著提高MySQL的性能. INN ...

  2. body-parser小解

    body-parser用来解析http请求体,对不同的content-type有不同的处理方式, 首先介绍一下常见的四种Content-Type: 1.application/x-www-form-u ...

  3. Node.js:Buffer浅谈

    Javascript在客户端对于unicode编码的数据操作支持非常友好,但是对二进制数据的处理就不尽人意.Node.js为了能够处理二进制数据或非unicode编码的数据,便设计了Buffer类,该 ...

  4. java.IO输入输出流:过滤流:buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? ...

  5. 一点公益商城开发系统模式Ring Buffer+

    一个队列如果只生产不消费肯定不行的,那么如何及时消费Ring Buffer的数据呢?简单的方案就是当Ring Buffer"写满"的时候一次性将数据"消费"掉. ...

  6. CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总

    CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总 开始 总的来说,OpenGL应用开发者会遇到为如下三种数据创建Vertex Buffer Object的情形: ...

  7. golang bytes.Buffer Reset

    func t() { a := []'} buf := new(bytes.Buffer) buf.Write(a) b := buf.Bytes() fmt.Println(b) buf.Reset ...

  8. 使用Ring Buffer构建高性能的文件写入程序

    最近常收到SOD框架的朋友报告的SOD的SQL日志功能报错:文件句柄丢失.经过分析得知,这些朋友使用SOD框架开发了访问量比较大的系统,由于忘记关闭SQL日志功能所以出现了很高频率的日志写入操作,从而 ...

  9. directx12中vetex buffer、index buffer和constant buffer绑定piple line的时机

    类别 时机 函数 建Heap vetex buffer 在Draw函数中 ID3D12GraphicsCommandList::IASetVertexBuffer 否 index buffer 在Dr ...

随机推荐

  1. [Unity3D]计时器/Timer

    原地址:http://blog.sina.com.cn/s/blog_5b6cb9500101aejs.html https://github.com/xuzhiping7/Unity3d-Timer ...

  2. 如何在远程计算机上运行PowerShell

    问题: 不能在WORKGROUP里面的远程计算机里运行PowerShell指令,报错为用户名密码错 解决方法: 把两台机器上(远程计算机其和本机)都加入到trustedhosts 具体请参考 http ...

  3. javascript实现播放音乐

    <script language="javascript"> var flag = 0; //控制变量放在函数内起不到作用.function openplay() { ...

  4. Redis在PHP中的基本使用案例

    下载http://www.oschina.net/p/redis 解压后里面有:lib 源文件 .examples 例子.test测试 将lib目录拷贝到你的项目中,就可以开始你的predis操作了. ...

  5. SuperSocket学习笔记(一)

    这是根据我自己学习的经历整理出来的,如有不对之处,还请多多指教! SuperSocket源码下载 SuperSocket文档 安装并启动Telnet 学习方法: QuickStrart + 文档 参考 ...

  6. HashMap的工作原理(转)

    HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...

  7. 第一天的Python之路 笔记

     打了***号的都是老师要求明天早上默写的  编程语言的作用(程序员使用的编程语言达到命令电脑工作的目的)及与操作系统和硬件的关系(编程 语言用来开发软件,软件基于操作系统之上,操作系统又基于硬件之上 ...

  8. 【消灭代办】第5周 - null拷贝&comma;input自适应&comma;进度条加载&comma;颜色随机值

    2018.12.10 代办一:javascript中js怎么拷贝null的值 null属于简单类型的数值,直接进行拷贝即可: 2018.12.11 代办二:怎么让input自适应宽度? 这样是写下代办 ...

  9. Python2&period;7-weakref

    weakref 模块,允许创建对象的弱引用,被弱引用的对象其引用计数不变,对象的引用计数为0时就会被垃圾清理机制释放内存空间,此时对其的弱引用也会失效.在对象会被交叉引用,需要释放内存空间时常用. 模 ...

  10. java文件上传-使用apache-fileupload组件

    目前文件上传的(框架)组件:Apache----fileupload .Orialiy – COS – 2008() .Jsp-smart-upload – 200M. 用fileupload上传文件 ...