NodeJS缓冲区

JavaScript语言本身在I/O时只有字符串数据类型,没有二进制数据类型,但在处理流数据时,必须用到二进制数据,因此在Node中,定义了一个Buffer类作为存放二进制数据的缓冲区

缓冲区存放与内存中

创建

// 创建长度为5字节的Buffer实例
var buf = new Buffer(5);
console.log(buf); //<Buffer 00 00 00 00 00>
// 可以用数组指定buffer内容
var buf = new Buffer([10,20,30,40,50]);
console.log(buf); //<Buffer 0a 14 1e 28 32>
// 字符串方式创建,默认编码方式为utf-8
var buf = new Buffer("hello world!","utf-8");
console.log(buf); //<Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64 21>

写入字符串

// 创建长度为5字节的Buffer实例
var buf = new Buffer(5);
// buffer空间不足,只会写入前面部分
buf.write("hello world");
console.log(buf.toString()); //hello world

写入整数,浮点也可以,要用writeInt,writeDouble之类

读取数据

var buf = new Buffer(3);
for(var i = 0; i<buf.length; i++){
buf[i] = i + 65;
}
// 转为字符串
console.log(buf.toString());
// 转为JSON对象
console.log(buf.toJSON()); /*输出*/
ABC
{ type: 'Buffer', data: [ 65, 66, 67 ] }

缓冲区合并

var buf1 = new Buffer("hello");
var buf2 = new Buffer(" ");
var buf3 = new Buffer("world!");
// 使用concat拼接,可以再加一个最大长度的限制
var result = Buffer.concat([buf1, buf2,buf3]);
console.log(result.toString()); /*输出*/
hello world!

缓冲区比较

var buf = new Buffer('abc');
// 大于的结果是1
console.log(Buffer.compare(buf,new Buffer('a')));
// 等于的结果是0
console.log(Buffer.compare(buf,new Buffer('abc')));
// 小于的结果是-1
console.log(Buffer.compare(buf,new Buffer('bBc')));

缓冲区复制

var buf1 = new Buffer('abc');
var buf2 = new Buffer(buf1.length); // 新建另一个对象
var buf3 = buf1; // 指向同一个对象,浅复制 buf1.copy(buf2); // 深复制
buf1[0] = 65; //'A' console.log(buf1.toString());
console.log(buf2.toString());
console.log(buf3.toString()); /*输出*/
Abc
abc
Abc

缓冲区裁剪

var buf1 = new Buffer('hello world');
var buf2 = buf1.slice(1,3); //取[1:3)中的内容
buf2[0] = 65; //'A',注意是浅复制
console.log(buf1.toString());
console.log(buf2.toString()); /*输出*/
hAllo world
Al

NodeJS缓冲区的更多相关文章

  1. nodejs基础 -- buffer缓冲区

    JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存 ...

  2. Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析

    以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...

  3. NodeJs入门学习(一)

    NodeJs是针对前端工程师向web后端深入理解的一门很好的语言. 首先,记录NodeJS几大特性,后续补充: 一.Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. ...

  4. 大熊君大话NodeJS之------Buffer模块

    一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...

  5. Nodejs Buffer

    javascript中的字符串本身就是以字符来存储,而非字节,下面的例子可以说明: console.log("0123456789".length); console.log(&q ...

  6. NodeJs - 100

    Nodejs官方文档 https://nodejs.org/en/docs/ Nodejs官方网站 https://nodejs.org/en/ Nodejs的特征:  1.采用非阻塞性IO机制:—— ...

  7. NodeJS缓存机制:畅销货,就多囤一点呗

    上一篇文章,我们已经实现了客户端向NodeJS服务器发出请求时,服务器从磁盘读取文件内容后,向客户端返回文件的数据.而对于爱莲(iLinkIT)的1对n的场景,即将文件共享出来之后,让多个用户同时下载 ...

  8. NodeJS服务器退出:完成任务,优雅退出

    上一篇文章,我们通过一个简单的例子,学习了NodeJS中对客户端的请求(request)对象的解析和处理,整个文件共享的功能已经完成.但是,纵观整个过程,还有两个地方明显需要改进: 首先,不能共享完毕 ...

  9. 读书笔记: nodejs API 参考

    >> bufferBuffer对象是全局对象Buffer支持的编码方式:ascii, utf8, base64, binarynew Buffer(size)new Buffer(arra ...

随机推荐

  1. epoll函数

    函数epoll 1. 函数epoll_creat: 该函数生成一个epoll专用的文件描述符 int epoll_creae(int size); 分析: size:epoll上能关注的最大描述符数 ...

  2. django-会话 cookie 中缺少HttpOnly 属性-安全加强

    如果django程序扫描到会话 cookie 中缺少 HttpOnly 属性问题,需要如何进行安全加强? https://docs.djangoproject.com/en/2.2/ref/setti ...

  3. MySQL基础一(CMD使用)

    概述 MySQL因可移植行高,安装简单小巧等优点被更多的开发者喜爱.执行MySQL的指令的方式有2种方式,方式一.MySQL的客户端软件比如navicat :方式二.通过Cmd命令: CMD命令执行方 ...

  4. C# 之 判断一个字符是否是汉字

    判断一个字符是不是汉字通常有三种方法: [1] 用 ASCII 码判断:[2] 用汉字的 UNICODE 编码范围判断:[3] 用正则表达式判断. 1.用ASCII码判断 在 ASCII码表中,英文的 ...

  5. 【ASP.NET】UCenter实现多站点同步注册

    问题描述 上一篇文章写了[ASP.Net]UCenter实现多站点同步登录退出 在整合论坛的时候,同步注册也是相当必要的一个功能:将论坛注册的用户同步到自己的网站,自己网站注册的用户同步到论坛. 官方 ...

  6. 通俗理解webService及.net中的使用方法

    什么是WebService? WebService两个关键字:HTTP.接口 WebService就是一个接口,与普通接口的区别就是:普通接口只能本地调用:WebService可以远程调用. WebS ...

  7. Python_os模块

    os模块:可以处理文件和目录,是Python系统和操作系统进行交互的一个接口 os模块常用方法: os.getcwd(): 获取当前工作目录,(即当前Python脚本工作的目录路径) os.chdir ...

  8. Flask Web中用MySQL代替SQLite

    由于.sqlite文件操作的诸多不便,决定常识用MySQL代替书上的SQLite作为数据库. 1.在虚拟环境中安装mysql-Python具体步骤为: <1> 安装python-dev s ...

  9. HDU 4463 Outlets 【最小生成树】

    <题目链接> 题目大意: 给你一些点的坐标,要求你将这些点全部连起来,但是必须要包含某一条特殊的边,问你连起这些点的总最短距离是多少. 解题分析: 因为一定要包含那条边,我们就记录下那条边 ...

  10. HYSBZ 4034 【树链剖分】+【线段树 】

    <题目链接> 题目大意: 有一棵点数为 N 的树,以点 1 为根,且树点有权值.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x ...