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脚本性能优化注意事项
Nov 18 Javascript
jQuery UI 实现email输入提示实例
Aug 15 Javascript
学习jQuey中的return false
Dec 18 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
js自定义QQ菜单效果
Jan 10 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
jQuery时间戳和日期相互转换操作示例
Dec 07 jQuery
js实现图片3D轮播效果
Sep 21 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
JQuery表单元素取值赋值方法总结
May 12 jQuery
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
Aug 04 Javascript
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP加密解密函数详解
2015/10/28 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
javascript 动态创建表格
2015/01/08 Javascript
javascript使用输出语句实现网页特效代码
2015/08/06 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python学习小技巧之列表项的拼接
2017/05/20 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
python使用配置文件过程详解
2019/12/28 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
中国制造网:Made-in-China.com
2019/10/25 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
计算机科学与技术应届生求职信
2013/11/07 职场文书
书法培训心得体会
2014/01/05 职场文书
2014年团工作总结
2014/11/27 职场文书
六年级学生评语大全
2014/12/26 职场文书
监考失职检讨书
2015/01/26 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js