NodeJS缓冲区
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缓冲区的更多相关文章
- nodejs基础 -- buffer缓冲区
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存 ...
- Javascript的二进制数据处理学习 ——nodejs环境和浏览器环境分别分析
以前用JavaScript主要是处理常规的数字.字符串.数组对象等数据,基本没有试过用JavaScript处理二进制数据块,最近的项目中涉及到这方面的东西,就花一段时间学了下这方面的API,在此总结一 ...
- NodeJs入门学习(一)
NodeJs是针对前端工程师向web后端深入理解的一门很好的语言. 首先,记录NodeJS几大特性,后续补充: 一.Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. ...
- 大熊君大话NodeJS之------Buffer模块
一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...
- Nodejs Buffer
javascript中的字符串本身就是以字符来存储,而非字节,下面的例子可以说明: console.log("0123456789".length); console.log(&q ...
- NodeJs - 100
Nodejs官方文档 https://nodejs.org/en/docs/ Nodejs官方网站 https://nodejs.org/en/ Nodejs的特征: 1.采用非阻塞性IO机制:—— ...
- NodeJS缓存机制:畅销货,就多囤一点呗
上一篇文章,我们已经实现了客户端向NodeJS服务器发出请求时,服务器从磁盘读取文件内容后,向客户端返回文件的数据.而对于爱莲(iLinkIT)的1对n的场景,即将文件共享出来之后,让多个用户同时下载 ...
- NodeJS服务器退出:完成任务,优雅退出
上一篇文章,我们通过一个简单的例子,学习了NodeJS中对客户端的请求(request)对象的解析和处理,整个文件共享的功能已经完成.但是,纵观整个过程,还有两个地方明显需要改进: 首先,不能共享完毕 ...
- 读书笔记: nodejs API 参考
>> bufferBuffer对象是全局对象Buffer支持的编码方式:ascii, utf8, base64, binarynew Buffer(size)new Buffer(arra ...
随机推荐
- 微信公众号之:JSSDK接入以及invalid signature等常见错误问题
最近在搞微信公众号开发,进行到网页开发部分被坑了一天,最坑的问题就是invalid signature,而网上大部分解答这个问题的都没有说清楚,都直接丢文档.博主认为这样很不好.本文是博主结合自身遇到 ...
- Unicode字符编码表
十进制 十六进制 字符数 编码分类(中文) 编码分类(英文) 起始 终止 起始 终止 (个) 0 127 0000 007F 128 C0控制符及基本拉丁文 C0 Control and B ...
- springboot整合Quartz实现动态配置定时任务
前言 在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功能. 一.新建一个springboot工程,并添加依赖 & ...
- 真的分治fft
以前学的分治fft f[i]=sigma(f[i-x]*g[x]),其中g[x]已知 那么我们可以用cdq分治来做(l,mid 对mid+1,t的影响) 而现在的$f[i]=sum(f(i-x)*f( ...
- Vue全局API总结
1.extend用于创建一个子类Vue,用$mount来挂载 <body> <div id="app"></div> <script> ...
- PHP中使用CURL实现GET和POST请求(转载)
CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 CURL 库.使用PHP的CURL 库可以简单和有效地去抓网页.你只 ...
- docker删除名字为none的imgae
docker rmi $(docker images -f "dangling=true" -q)
- Spark中groupByKey、reduceByKey与sortByKey
groupByKey把相同的key的数据分组到一个集合序列当中: [("hello",1), ("world",1), ("hello",1 ...
- 20165235 祁瑛 2018-4 《Java程序设计》第八周学习总结
20165235 祁瑛 2018-4 <Java程序设计>第八周学习总结 教材学习内容总结 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本.进程是程序的一次动态执行过程,它对 ...
- day65 request对象,以及方法,response对象,render,redirect
这里的都是我们会频繁使用到的,用得多了自然就会了,我们写项目都是少不了这些用法的,所以这就把老师的博客粘过来就好了, Request对象 官方文档 属性 所有的属性应该被认为是只读的,除非另有说明. ...