2.Node.js 缓冲器(Buffer)

news/2024/10/20 16:53:25/

二、常用模块

2.1Buffer(缓冲器)

2.1.1概念

Buffer是一个类似于数组的对象,用于表示固定长度的字节序列

Buffer本质是一段内存空间,专门用来处理二进制数据
在这里插入图片描述

2.2.2特点

Buffer大小固定无法调整;

Buffer性能较好,可以直接操作计算机内存;

每个元素的大小为1个字节(byte)。

在这里插入图片描述

2.2.3创建Buffer
//创建Buffer的三种方式//1、alloc会把内存空间全部置0
let buf1=Buffer.alloc(10);
console.log('buf1:',buf1)//2、allocUnsafe不会把内存空间全部置0,可能会有之前别的程序留下来的数据
let buf2=Buffer.allocUnsafe(10)
console.log('buf2:',buf2)//3、from
let buf3=Buffer.from('sally')
let buf4=Buffer.from([73,32,108,111,118,101,32,83,97,108,108,121])
console.log('buf3:',buf3)
console.log('buf4:',buf4)
//将buf4转换成字符串(unicode码)
console.log('buf4_tostring:',buf4.toString())

输出:

//创建了1个10字节的内存空间,每个内存空间都会置0
buf1: <Buffer 00 00 00 00 00 00 00 00 00 00>
//创建了1个10字节空间,每个内存空间如果有旧数据的话,不会置0
buf2: <Buffer 00 00 00 00 00 00 00 00 00 00>
//将字符转换为unicode码(16进制)
buf3: <Buffer 73 61 6c 6c 79>
//将数组转换成16进制
buf4: <Buffer 49 20 6c 6f 76 65 20 53 61 6c 6c 79>
//将Buf4转换成字符串
buf4_tostring: I love Sally
2.2.4Buffer的读写
buf1=Buffer.from('hello')
console.log('第一个字节h的ASCII码(十进制):',buf1[0])
console.log('第一个字节h的ASCII码(二进制):',buf1[0].toString(2))buf1[0]=105
console.log('修改了第一个字节后的buf1:',buf1.toString())

输出:

第一个字节h的ASCII(十进制): 104
第一个字节h的ASCII(二进制): 1101000
修改了第一个字节后的buf1: iello
2.2.5Buffer 溢出

Buffer的每个元素是一个字节,也就是8位。最大能存储的十进制数是255(11111111),如果给一个元素存入一个大于255的数字,它会把高于8位的部分舍弃。

如:我们存入一个数字511(00000001 11111111),它会把前面8位舍弃,最终只会存入255(11111111)

let buf1=Buffer.alloc(10)
console.log('修改前:',buf1)
buf1[0]=511
console.log('修改后:',buf1)

输出:

修改前: <Buffer 00 00 00 00 00 00 00 00 00 00>
//写入的是511,结果只保留了后8位,ff为16进制,转换成2进制就是11111111,转换成10进制就是255
修改后: <Buffer ff 00 00 00 00 00 00 00 00 00>
2.2.6关于中文
let buf1=Buffer.from('你好')
console.log(buf1)

输出:

//在utf-8的编码格式下,每个中文字占三个字节
<Buffer e4 bd a0 e5 a5 bd>

http://www.ppmy.cn/news/1540569.html

相关文章

公共字段自动填充-MyBatis-Plus

由于使用了MyBatis-Plus提供的方法操作数据库&#xff0c;所有无法直接使用AOP技术来在mapper方法执行前对公共字段赋值。 在 MyBatis-Plus 中&#xff0c;可以通过实现 MyBatis-Plus 提供的 MetaObjectHandler 接口来实现公共字段的自动填充&#xff0c;比如在插入或更新数据…

2024年【汽车驾驶员(技师)】考试题库及汽车驾驶员(技师)试题及解析

随着汽车行业的快速发展&#xff0c;对汽车驾驶员的专业技能要求也越来越高。为了确保每一位驾驶员都能具备扎实的专业技能和安全生产知识&#xff0c;2024年的汽车驾驶员&#xff08;技师&#xff09;考试题库进行了全面更新。安全生产模拟考试一点通作为专业的考试辅导平台&a…

②PROFINET转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 PROFINET 转 Modbus TCP &#xff08;接上一章&#xff09; 配置使用 与 PROFINET 主站进行组态说明 这里介绍与西门子 PLC 的…

docker 基础镜像里 scratch 和alpine,ubuntu centos详细对比(镜像优化)

1. scratch 特点 极简&#xff1a;scratch 是一个空的镜像&#xff0c;没有任何操作系统或文件系统。 体积&#xff1a;scratch 镜像的大小几乎为零&#xff0c;是最小的镜像。 灵活性&#xff1a;完全由用户自定义&#xff0c;没有任何预装的工具或库。 依赖管理&#xff1…

【Linux系统编程】第三十三弹---深入探索进程间通信:原理、方式、及管道技术详解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、进程为什么要通信 2、进程如何通信 3、进程间常见的通信方式 4、管道 4.1、什么是管道 4.2、匿名管道 4.2.1、定义 …

两个数列问题

# 问题描述 给定长度分别为 n 和 m 的两个数列a[n]、b[m]&#xff0c;和一个整数k。求|(a[i] - b[j])^2 - k^2|的最小值。 ## 输入格式 第一行有 2 个整数 n、m、k&#xff0c;分别表示数列 a、b 的长度&#xff0c;以及公式中的整数 k。 第二行有 n 个整数&#xff0c;表示…

【Flutter】Dart:库

在 Dart 中&#xff0c;库&#xff08;Library&#xff09;是组织和重用代码的基本方式。通过库&#xff0c;我们可以将代码分割成模块化的部分&#xff0c;方便管理和共享&#xff0c;同时避免命名冲突。Dart 提供了大量内置库&#xff0c;用于支持常见的功能&#xff0c;比如…

pandas-使用技巧

pandas-使用技巧 简单技巧 仅个人笔记使用&#xff0c;感谢点赞关注 简单技巧 pd.to_dict()&#xff1a;Dataframe格式数据转字典数据pd.dropna()&#xff1a;去nan值& | ~&#xff1a;pd逻辑运算符pd.isnan()&#xff1a;判断是否为nan值pd.concat&#xff1a;多个pd拼接…