Node.js缓存
Node.js Buffer(缓冲区)
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。
但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
在 Node.js 中,Buffer 类是随 Node 内核一起发布的核心库。Buffer 库为 Node.js 带来了一种存储原始数据的方法,可以让 Node.js 处理二进制数据,每当需要在 Node.js 中处理I/O操作中移动的数据时,就有可能使用 Buffer 库。原始数据存储在 Buffer 类的实例中。一个 Buffer 类似于一个整数数组,但它对应于 V8 堆内存之外的一块原始内存。
Buffer 与字符编码
Buffer 实例一般用于表示编码字符的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六进制编码的数据。 通过使用显式的字符编码,就可以在 Buffer 实例与普通的 JavaScript 字符串之间进行相互转换。
const buf = Buffer.from('runoob', 'ascii'); // 输出 72756e6f6f62 console.log(buf.toString('hex')); // 输出 cnVub29i console.log(buf.toString('base64'));
Node.js 目前支持的字符编码包括:
-
ascii - 仅支持 7 位 ASCII 数据。如果设置去掉高位的话,这种编码是非常快的。
-
utf8 - 多字节编码的 Unicode 字符。许多网页和其他文档格式都使用 UTF-8 。
-
utf16le - 2 或 4 个字节,小字节序编码的 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。
-
ucs2 - utf16le 的别名。
-
base64 - Base64 编码。
-
latin1 - 一种把 Buffer 编码成一字节编码的字符串的方式。
-
binary - latin1 的别名。
-
hex - 将每个字节编码为两个十六进制字符。
将 Buffer 转换为 JSON 对象
语法
将 Node Buffer 转换为 JSON 对象的函数语法格式如下:
buf.toJSON()
当字符串化一个 Buffer 实例时,JSON.stringify() 会隐式地调用该 toJSON()。
返回值
返回 JSON 对象。
实例
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]); const json = JSON.stringify(buf); // 输出: {"type":"Buffer","data":[1,2,3,4,5]} console.log(json); const copy = JSON.parse(json, (key, value) => { return value && value.type === 'Buffer' ? Buffer.from(value.data) : value; }); // 输出: <Buffer 01 02 03 04 05> console.log(copy);
执行以上代码,输出结果为:
{"type":"Buffer","data":[1,2,3,4,5]} <Buffer 01 02 03 04 05>
缓冲区裁剪
Node 缓冲区裁剪语法如下所示:
buf.slice([start[, end]])
参数
参数描述如下:
-
start - 数字, 可选, 默认: 0
-
end - 数字, 可选, 默认: buffer.length
返回值
返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。
实例
var buffer1 = Buffer.from('runoob'); // 剪切缓冲区 var buffer2 = buffer1.slice(0,2); console.log("buffer2 content: " + buffer2.toString());
执行以上代码,输出结果为:
buffer2 content: ru
裁剪功能返回的实际是原始缓存区 buffer 或者一部分,操作的是与原始 buffer 同一块内存区域。
// 裁剪 var buffer_origin = Buffer.from('runoob'); var buffer_slice = buffer_origin.slice(0,2); console.log("buffer slice content: "+buffer_slice.toString()); console.log("buffer origin content: "+buffer_origin.toString()); buffer_slice.write("wirte"); // Write buffer slice // 裁剪前与原始字符串的改变 console.log("buffer slice content: "+buffer_slice.toString()); console.log("buffer origin content: "+buffer_origin.toString());
输出:
buffer slice content: ru buffer origin content: runoob buffer slice content: wi buffer origin content: winoob
可以看到对裁剪返回的 buffer 进行写操作同时,也对原始 buffer 进行了写操作。
摘自:http://www.runoob.com/nodejs/nodejs-buffer.html

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《Python编程:从入门到实践》 第5章习题
#5-1 条件测试:编写一系列条件测试;将每个测试以及你对其结果的预测和实际结果 #都打印出来。你编写的代码应类似于下面这样: car = 'subaru' print("Is car == 'subaru'? I predict True.") print(car == 'subaru') print("\nIs car == 'audi'? I predict False.") print(car == 'audi' + "\n") #5-2 更多的条件测试:你并非只能创建10个测试。如果你想尝试做更多的比较,可再编写 #一些测试,并将它们加入到conditional_tests.py中。对于下面列出的各种测试,至少编写 #一个结果为True和False的测试。 #略 #5-3 外星人颜色#1:假设在游戏中刚射杀了一个外星人,请创建一个名为alien_color #的变量,并将其设置为'green'、'yellow'或'red'。 alien_color = 'green' if alien_color == 'green': score = 5 if alien_color ==...
- 下一篇
音视频技术开发周刊 65期
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/82392657 『音视频技术开发周刊』由LiveVideoStack团队出品,专注在音视频技术领域,纵览相关技术领域的干货和新闻投稿,每周一期。点击『阅读原文』,浏览第65期内容,祝您阅读愉快。 架构 51Talk音视频技术实践和独特挑战 本文来自51Talk技术总监陈靖在LiveVideoStackCon 2018热身分享,并由LiveVideoStack整理而成。陈靖回顾了51Talk音视频技术的演进路线,从最早的QQ、Skype到接入第三方SDK,最后实现大部分功能自研,每个阶段都是根据业务需求、研发力量、资金投入等各种条件下的最优选择。未来,51Talk还会继续投入自研,完善功能。 李青源:高清体验和带宽节省,瞄准方向深耕 在LiveVideoStackCon 2018前夕,金山云资深产品专家李青源接受了LiveVideoStack的采访。他聊到了金山云在“视频+AI”和“编解码”方向的探索,致力于为终端观众...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS关闭SELinux安全模块
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7设置SWAP分区,小内存服务器的救世主
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启