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 相关文章推荐
js里取容器大小、定位、距离等属性搜集整理
Aug 19 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
Apr 30 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
Jun 19 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
Jun 21 Javascript
AngularJS 整理一些优化的小技巧
Aug 18 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
vue  directive定义全局和局部指令及指令简写
Nov 20 Javascript
Vue 设置axios请求格式为form-data的操作步骤
Oct 29 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
Jul 22 Javascript
vue键盘事件点击事件加native操作
Jul 27 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 smarty 二级分类代码和模版循环例子
2011/06/01 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
简单的php购物车代码
2020/06/05 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
python实现从web抓取文档的方法
2014/09/26 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python把1变成01的步骤总结
2019/02/27 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
顶撞老师检讨书
2014/02/07 职场文书
高中生评语大全
2014/04/25 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
销售岗位职责范本
2014/06/12 职场文书
九寨沟导游词
2015/02/02 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
用Python创建简易网站图文教程
2021/06/11 Python
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server