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 相关文章推荐
Exjs 入门篇
Apr 07 Javascript
jQuery实现动画效果的简单实例
Jan 27 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
javascript实现链接单选效果的方法
May 13 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
Dec 23 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
Jun 17 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
js模拟支付宝密码输入框
Apr 11 Javascript
详解前后端分离之VueJS前端
May 24 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
微信小程序canvas截取任意形状的实现代码
Jan 13 Javascript
解决vuex数据页面刷新后初始化操作
Jul 26 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
php 时间计算问题小结
2009/01/04 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javaScript中的原型解析【推荐】
2016/05/05 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
通过代码实例展示Python中列表生成式的用法
2015/03/31 Python
python uuid模块使用实例
2015/04/08 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
python构建自定义回调函数详解
2017/06/20 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
微信跳一跳辅助python代码实现
2018/01/05 Python
Python爬虫框架Scrapy基本用法入门教程
2018/07/26 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
django 模型字段设置默认值代码
2020/07/15 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
如何用PHP实现邮件发送
2012/12/26 面试题
西式婚礼主持词
2014/03/13 职场文书
乡镇组织委员个人整改措施
2014/09/16 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
民事和解协议书格式
2014/11/29 职场文书
大队委员竞选稿
2015/11/20 职场文书
军训心得体会范文(2016最新篇)
2016/01/11 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python