node.js中的buffer.slice方法使用说明


Posted in Javascript onDecember 10, 2014

方法说明:

返回一个新的buffer对象,这个新buffer和老buffer公用一个内存。

但是被start和end索引偏移缩减了。(比如,一个buffer里有1到10个字节,我们只想要4-8个字节,就可以用这个函数buf.slice(4,8),因为他们共用一个内存,所以不会消耗内存,)

因为共用内存,所以修改新的buffer后,老buffer的内容同样也会被修改。

语法:

buffer.slice([start], [end])

接收参数:

start      开始位置,默认

end      结束位置,默认为buffer长度

例子:

用ASCII码字母表创建一个buffer,用一下slice函数,然后修改原buffer中的一个字节。

var buf1 = new Buffer(26);

for (var i = 0 ; i < 26 ; i++) {

  buf1[i] = i + 97; // 97 is ASCII a

}

var buf2 = buf1.slice(0, 3);

console.log(buf2.toString('ascii', 0, buf2.length));

buf1[0] = 33;

console.log(buf2.toString('ascii', 0, buf2.length));

// abc

// !bc

源码:

// TODO(trevnorris): currently works like Array.prototype.slice(), which

// doesn't follow the new standard for throwing on out of range indexes.

Buffer.prototype.slice = function(start, end) {

  var len = this.length;

  start = ~~start;

  end = util.isUndefined(end) ? len : ~~end;

  if (start < 0) {

    start += len;

    if (start < 0)

      start = 0;

  } else if (start > len) {

    start = len;

  }

  if (end < 0) {

    end += len;

    if (end < 0)

      end = 0;

  } else if (end > len) {

    end = len;

  }

  if (end < start)

    end = start;

  var buf = new NativeBuffer();

  sliceOnto(this, buf, start, end);

  buf.length = end - start;

  if (buf.length > 0)

    buf.parent = util.isUndefined(this.parent) ? this : this.parent;

  return buf;

};
Javascript 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
Sep 01 Javascript
jquery操作select option 的代码小结
Jun 21 Javascript
jquery序列化表单去除指定元素示例代码
Apr 10 Javascript
JQuery中DOM事件合成用法实例分析
Jun 13 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
Jun 27 Javascript
使用 node.js 模仿 Apache 小部分功能
Jul 07 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
Vue axios 跨域请求无法带上cookie的解决
Sep 08 Javascript
JS常用跨域方法实现原理解析
Dec 09 Javascript
node.js中的buffer.write方法使用说明
Dec 10 #Javascript
node.js中的http.request.end方法使用说明
Dec 10 #Javascript
node.js中的emitter.on方法使用说明
Dec 10 #Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 #Javascript
node.js中的emitter.emit方法使用说明
Dec 10 #Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 #Javascript
node.js中的events.emitter.listeners方法使用说明
Dec 10 #Javascript
You might like
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
基于mysql的bbs设计(一)
2006/10/09 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
PHP中cookie知识点学习
2018/05/06 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
jQuery知识点整理
2015/01/30 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
javascript框架设计之类工厂
2015/06/23 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
翻译专业应届生求职信
2013/11/23 职场文书
趣味活动策划方案
2014/02/08 职场文书
《傅雷家书》教学反思
2014/04/20 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
大雁塔导游词
2015/02/04 职场文书
羊脂球读书笔记
2015/06/30 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis