登录  /  注册
首页 > web前端 > js教程 > 正文

node.js中什么是Buffer对象?使用场景是什么

青灯夜游
发布: 2021-07-28 18:41:37
转载
1703人浏览过

本篇文章给大家介绍一下node.js中的buffer对象,看看buffer对象的使用场景是什么,有哪些优势。

node.js中什么是Buffer对象?使用场景是什么

Buffer对象,是Node的核心模块,在面试中也是会频繁被问到一个考题,如果没有对其深入探究,可能就跟我一样只会用,一旦面试官扩展问些问题可能就不会了。反正,当时我也只能回答说:目前涉及到的业务对Buffer模块用的比较少,但是Buffer对象可以对于一些字符串传输无法满足业务功能和性能上得到有效的优化。【推荐学习:《nodejs 教程》】

所以,今天学习一下Buffer对象。

Buffer对象

Buffer对象用于表示固定长度的字节序列

// 创建一个长度为 10、以零填充的 Buffer。
const buf1 = Buffer.alloc(10);

// 创建一个长度为 10 的 Buffer,
// 其中全部填充了值为 `1` 的字节。
const buf2 = Buffer.alloc(10, 1);

var str="hello Jasen"; 
var buf = new Buffer.from(str,'utf-8');
console.log(buf);

//输出:<Buffer 68 65 6c 6c 6f 20 4a 61 73 65 6e>
登录后复制

观察输出的结果,Buffer对象类似一个数组。

Buffer对象中的每个元素都是16进制的两位数(即0到255的数值)

对Buffer某个元素赋值如果小于0的,会逐次加256,直到得到一个0到255范围的值,如果大于255则逐次减256,直到得到0-255范围得值,如果是小数的话,则直接取整。

使用场景

  • 可用于处理大量二进制数据
  • 处理图片、文件接收上传、网络协议等等

优势

网络传输中,性能提升

大部分网络传输的时候会使用通过使用字符串,这难免需要转换成Buffer,以二进制方式进行数据传输。如果我们直接预先转换为Buffer 再进行传输,那么在传输过程中无需做额外的转换,也避免了损耗,使性能得到提升。

以下通过ab进行一次性能测试,发起200个并发客户端请求的结果,QPS提升的不是很高,但还是有一点点的提升,可以复制代码执行下,是否结果和我一样

1.png

2.png

var http = require(&#39;http&#39;);
var str = "";

for (var i = 0; i < 1024 * 10; i++) {
    str += "a";
}

str = new Buffer.from(str,&#39;utf-8&#39;);

http.createServer(function (req, res) {
    res.writeHead(200);
    res.end(bufstr);
}).listen(8002);
登录后复制

Buffer与Stream

Stream 也是Node的核心模块,数据就像流水一样,流是对输入输出设备的抽象,是一组有序的、有起点和终点的字节数据传输手段。

Node.js 中有四种基本的流类型:

  • Writable - 可写入数据的流(例如 fs.createWriteStream())
  • Readable - 可读取数据的流(例如 fs.createReadStream())。
  • Duplex - 可读又可写的流(例如 net.Socket)。
  • Transform - 在读写过程中可以修改或转换数据的 Duplex

场景:

文件分片上传下载,比如下载电影时可以边下载边看,这样一个实现过程。

原文地址:https://juejin.cn/post/6955490895131066382

更多编程相关知识,请访问:编程入门!!

以上就是node.js中什么是Buffer对象?使用场景是什么的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:掘金--南吕网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号