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 相关文章推荐
IE与Firefox下javascript getyear年份的兼容性写法
Dec 20 Javascript
JQuery AJAX实现目录浏览与编辑的代码
Oct 21 Javascript
stream.js 一个很小、完全独立的Javascript类库
Oct 28 Javascript
javascript中RegExp保留小数点后几位数的方法分享
Aug 13 Javascript
Js操作Select大全(取值、设置选中等等)
Oct 29 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
Oct 14 Javascript
使用JavaScript链式编程实现模拟Jquery函数
Dec 21 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
Jun 08 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
Sep 24 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
Mar 03 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 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
图书管理程序(二)
2006/10/09 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
url传递的参数值中包含&amp;时,url自动截断问题的解决方法
2016/08/02 Javascript
让html元素随浏览器的大小自适应垂直居中的实现方法
2016/10/12 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
layui使用label标签的方法
2019/09/14 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
python 算法 排序实现快速排序
2012/06/05 Python
python实现图片变亮或者变暗的方法
2015/06/01 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
简单的Python调度器Schedule详解
2019/08/30 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
电子信息专业自荐书
2014/02/04 职场文书
化学教育专业自荐信
2014/07/04 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书