02-Node.js—Buffer(缓冲器)

2023-11-16

1、概念

  • Buffer 是一个类似于数组的对象 ,用于表示固定长度的字节序列
  • Buffer 本质是一段内存空间,专门用来处理 二进制数据
  • 在buffer中存储的都是·二进制数据·,但是在显示的时候都是以16进制的形式显示。
  • Buffer中的内存不是通过JavaScript 分配的,而是在底层通过C++申请的。
  • 也就是我们可以直接通过Buffer来创建内存中的空间
    在这里插入图片描述

2.、特点

  • Buffer 大小固定无法调整
  • Buffer 性能较好,可以直接对计算机内存进行操作
  • 每个元素的大小为 1 字节(byte)
    在这里插入图片描述

3、创建Buffer

  • Node.js 中创建 Buffer 的方式主要如下几种:

3.1 Buffer.alloc

// 创建了一个长度为8字节的Buffer,相当于申请了8子节的内存空间,每个字节的值为0
const buf1 = Buffer.alloc(8)
console.log(buf1.length);
console.log(buf1);

输出:

8
<Buffer 00 00 00 00 00 00 00 00>

3.2 Buffer.allocUnsafe

//创建了一个长度为 8 字节的 Buffer,buffer 中可能存在旧的数据, 可能会影响执行结果,所以叫unsafe
const buf2 = Buffer.allocUnsafe(20)

注解:allocUnsafe在分配内存之前是不会清空数据,如果这些数据恰好保存了用户的一些敏感数据就造成了数据泄露
alloc方法会将内存的数据进行清空之后再分配就会安全很多,但是缺点是性能没有allocUnsafe高

3.3 Buffer.from

//通过字符串创建 Buffer
const buf3  = Buffer.from('hello')
console.log(buf3);

输出结果:

<Buffer 68 65 6c 6c 6f>
//通过数组创建 Buffer
const buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(buf4);

输出:

<Buffer 69 6c 6f 76 65 79 6f 75>

4、操作Buffer

4.1 Buffer 与字符串的转化

  • 我们可以借助 toString 方法将 Buffer 转为字符串
const buf4 = Buffer.from([105, 108, 111, 118, 101, 121, 111, 117])
console.log(buf4.toString());

输出:

iloveyou

toString 默认是按照 utf-8 编码方式进行转换的。

4.2 Buffer 的读写

  • Buffer 可以直接通过 数组[ ] 的方式对数据进行处理。
    1.读取
const buf3 = Buffer.from('hello')
console.log(buf3[0]);

输出:

104

输出的是ASCII码值。

  1. 修改
const buf3 = Buffer.from('hello')
console.log(buf3);//改变前
//<Buffer 68 65 6c 6c 6f>
buf3[0] = 97//ASCII值
console.log(buf3);//改变后
//<Buffer 61 65 6c 6c 6f>

在提醒一次,终端输出的时候默认是16进制

我们转化成字符串的形式在看一遍。

const buf3 = Buffer.from('hello')
console.log(buf3.toString());//改变前
//hello
buf3[0] = 97
console.log(buf3.toString());//改变后
//aello

注意:

  1. 如果修改的数值超过 255 ,则超过 8 位数据会被舍弃
const buf = Buffer.from('hello');
buf[0] = 361;// 舍弃高位的数字  0001 0110 1001  => 0110 1001
console.log(buf);
  1. 一个 utf-8 的字符 一般 占 3 个字节
const buf = Buffer.from('你好');
console.log(buf);

输出:

<Buffer e4 bd a0 e5 a5 bd>

参考

尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

02-Node.js—Buffer(缓冲器) 的相关文章

随机推荐

  • 二、Spring IoC 容器

    IOC容器及相关概念 什么是 IOC 控制反转 把对象创建和对象之间的调用过程 交给 Spring 容器来管理 使用 IOC 的目的 为了解耦合 IOC 的底层原理 XML 解析技术 工厂模式 反射 IOC 目的 最低限度降低类与类之间的耦
  • landsat8数据下载教程

    Landsat下载地址 我们最常用的下载地址是USGShttps earthexplorer usgs gov 这是一个提供Landsat和其他卫星影像数据的官方网站 如果您还没有USGS EarthExplorer账户 请点击网站右上角的
  • OpenCV入门学习(五)处理视频帧

    opencv2 vs2010 opencv不仅可以播放视频 还可以对视频进行处理 并输出处理后的视频 本文以提取视频canny边缘为例 编写程序如下 include
  • IDEA中将maven项目导出打包成war包

    点击File gt Project Structure gt Artifacts gt add 号 gt Web Application Archive gt For yourProjectName 在这里选择你要导出的war包存放的路径
  • flex布局中的align-content属性

    align content属性起作用的条件 对父元素设置自由盒属性display flex 并且设置排列方式为横向排列flex direction row 默认值 设置换行 flex wrap wrap Demo代码
  • 程序员技术练级攻略

    原文地址 http coolshell cn articles 4990 html 月光博客6月12日发表了 写给新手程序员的一封信 翻译自 An open letter to those who want to start program
  • 十四、pwm输出实验

    一 pwm的概述 1 pwm的工作原理 图中 假定定时器工作在向上计数 PWM 模式 且当 CNT
  • 论文阅读:BotFinder: A Novel Framework for Social Bots Detection in Online Social Networks Based

    目录 摘要 1 Introduction 3 Our Proposed Method BotFinder 3 1 Overview 3 2 Step1 Feature Engineering 3 3 Step2 Similarity Cal
  • 域名如何部署到正在使用的服务器

    阿里云申请的域名 PHP环境 宝塔工具 一 登录阿里云 对该域名进行解析 二 登录宝塔 添加站点 添加成功后 在改站点下上传你已经做好的页面即可 如果需要FTP操作的 就创建FTP账号密码 创建成功后 直接用FTP账号密码登录即可
  • FaceShifter:新的人脸交换模型

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 如今 深度学习已近在图像合成 图像处理领域中取得惊人的成果 FaceShifter 1 便是其中之一 它是一种深度学习模型 可以非常先进的技术实现人脸交换 在本文中 我们
  • 【2022年高教杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案及代码实现(一)

    1 问题1 对这些玻璃文物的表面风化与其玻璃类型 纹饰和颜色的关系进行分析 结合玻璃的类型 分析文物样品表面有无风化化学成分含量的统计规律 并根据风化点检测数据 预测风化前的化学成分含量 2 问题1的分析 首先需要对玻璃表面风化情况与玻璃类
  • 数据库应用:CentOS 7离线安装PostgreSQL

    目录 一 理论 1 PostgreSQL 2 PostgreSQL离线安装 3 PostgreSQL初始化 4 PostgreSQL登录操作 二 实验 1 CentOS 7离线安装PostgreSQL 2 登录PostgreSQL 3 Na
  • 1:pandas创建DataFrame对象

    实例代码 import pandas as pd df pd DataFrame age 1 2 name 李华 大刘 print df age 和name为列的标题 中括号的为列的内容 前面的这个为索引 如果想以age为索引可以这样写 i
  • myfile

    淄博市公共就业招聘云平台 个人用户使用指导说明 淄博市公共就业招聘云平台是依托Hiturn 海豚 人才网 通过互联网技术 对现场招聘会进行全真模拟 为企业单位用户 个人求职用户搭建 同时支持电脑端与手机端的使用 并可在线交流 信息展示 简历
  • conda的使用教程

    conda的介绍 简单来说 conda软件就是来管理包的软件 以Python为例 在实际生活中 我们要处理多个不同的项目 因此 要安装不同的项目所需要的包 为了管理方便 conda就是用来打理不同项目的包 为不同项目创建不同虚拟环境 把不同
  • 制作HTML5百科页面

    先建一个index html 首页 代码如下 p align center a href page01 html target self img src images index jpg alt 传智播客设计学院UI设计师 a p 首页的效
  • java学习之路——第一次java(java的入门)

    java学习之路 第一次java java的入门 一 什么是java java语言是一种强类型的语言 其中包含一套基本的符号 这些符号构成了java语言的表示符和关键字 是一个跨平台的面向对象的程序设计语言 由Sun Microsystem
  • 离散数学第一章总结

    离散数学第一章 1 公式类型 1 重言式 也是永真式 公式真值恒为1 2 矛盾式 永假式 真值恒为0 3 可满足式 不是矛盾式的就都是可满足式 重言式一定是可满足式 2 成真赋值与成假赋值 也叫成真指派与成假指派 一组原子的取值 真值指派
  • Tensorflow计算、数据和运行模型

    参考书籍 Tensorflow实战Google深度学习框架 郑泽宇等 Tensorflow是一款谷歌开源的深度学习工具 与其他深度学习工具 比如caffe Deeplearning4j等 相比 其受关注度和欢迎程度尤为突出 在谷歌内部 Te
  • 02-Node.js—Buffer(缓冲器)

    文章目录 1 概念 2 特点 3 创建Buffer 3 1 Buffer alloc 3 2 Buffer allocUnsafe 3 3 Buffer from 4 操作Buffer 4 1 Buffer 与字符串的转化 4 2 Buff