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初学困境—js初学
Dec 29 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 Javascript
js选取多个或单个元素的实现代码(用class)
Aug 22 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
jquery 淡入淡出效果的简单实现
Feb 07 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
May 19 Javascript
简单实现Bootstrap标签页
Aug 09 Javascript
浅谈Vue.nextTick 的实现方法
Oct 25 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
Jan 13 Javascript
详解vue+webpack+express中间件接口使用
Jul 17 Javascript
Vue页面渲染中key的应用实例教程
Jan 12 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
自己动手做一个SQL解释器
2006/10/09 PHP
PHP安全防范技巧分享
2011/11/03 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
php实现姓名根据首字母排序的类与方法(实例代码)
2018/05/16 PHP
prototype1.4中文手册
2006/09/22 Javascript
Prototype Object对象 学习
2009/07/12 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
深入浅析Node.js单线程模型
2017/07/10 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
python进阶教程之模块(module)介绍
2014/08/30 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
Python连接mysql数据库及简单增删改查操作示例代码
2020/08/03 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
Notino法国:购买香水和化妆品
2019/04/15 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
求职信范文英文版
2014/01/05 职场文书
应届大学生求职信
2014/07/20 职场文书
高中运动会广播稿
2014/09/16 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android