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 相关文章推荐
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
javascript qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
Javascript 中的 call 和 apply使用介绍
Feb 22 Javascript
Node.js安装教程和NPM包管理器使用详解
Aug 16 Javascript
js实现键盘上下左右键选择文字并显示在文本框的方法
May 07 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
原生JavaScript实现瀑布流布局
Jun 28 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
vue使用map代替Aarry数组循环遍历的方法
Apr 30 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
php实现jQuery扩展函数
2009/10/30 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP插入排序实现代码
2013/04/04 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
利用python批量检查网站的可用性
2016/09/09 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
大学生找工作推荐信范文
2013/11/28 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
关于青春的演讲稿
2014/05/05 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
2014年团支书工作总结
2014/11/14 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers