Buffer 类型介绍|学习笔记

本文涉及的产品
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 快速学习 Buffer 类型介绍

开发者学堂课程【Node.js 入门与实战:Buffer 类型介绍】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/588/detail/8309


Buffer 类型介绍

 

目录:

一、Buffer 对象介绍

二、Buffer 对象原因

三、Buffer 对象图片讲解

四、Buffer 对象类型介绍

五、Buffer 对象创建流程

六、Buffer 对象属性

 

一、Buffer 对象

1.介绍

buffer对象可以理解为一个字节数组对象,buffer对象可以看成一个二进制对象,(保存一堆二进制数组的对象),主要用于数据传输,buffer的核心意义就是为了数据传输。

Buffer对象是Node处理二进制数据的一个接口

2. 为什么使用Buffer对象

做数据传输使用Buffer对象,把数据一次拿出一点,buffer每次取出一点,目的就是为了数据传输

3.Buffer图片讲解

image.png

文件流

image.png

image.png


二、Buffer 类型介绍

1. JavaScript 语言没有读取或操作二进制数据流的机制。

2. Node.js 中引入了 Buffer 类型使我们可以操作 TCP 流或文件流。

3. Buffer 类型的对象类似于整数数组,但 Buffer 的大小是固定的、且在V8堆外分配物理内存。Buffer 的大小在被创建时确定,且无法调整。( buf.length是固定的,不允许修改)

4. Buffer 是全局的,所以使用的时候无需 require()的方式来加载

 

三、如何创建 Buffer 对象

常见的 API 介绍

1. 创建一个 Buffer 对象

Buffer 在官方类型当中是没有默认储存二进制流的。

Buffer 的长度是固定的,不允许修改,如修改只能重新创建一个新的。

Buffer 是全局的,所有使用的时候无需 require()的方式来加载。

//通过一个字节数组来创建一个buffer对象

Var array =(0x68,0x65,0x6c,0x6c,0x6f);

Var buf -buffer,from(array);

//buffer转换为字符串

Console.log(buf.tostring(‘utf8’);

//通过一个字符串来创建一个buffer对象

//buffer.from(string[,encoding])

Var buf =buffer.from(‘你好世界!Hello Word!~’);

Console.log(buf);

Console.log(buf.tostring()); 

//判断一个对象是否是buffer类型对象

//buffer.isbuffer(obj)

//obj

//Returns:

//Returns ture if obj is a buffer,false otherwise.

获取buffer中的某个字节

//根据索引获取buffer中的某个字节(byte、octet)

//buf(index)

//buffer对象与编码

Node.js目前支持的编码如下,

Ascii

Utf8

Utf16le

ucs2是utf16le的别名

base64

Latin1

Binary是latin1的别名

Hex

用两位16进制来表示每个字节

2. 拼接多个Buffer对象为一个对象

//Buffer.concat(list[, totallength])var bufferList - [];

var buf - Buffer.concat(bufferList);

3. 获取字符串对应字节个数

//Buffer.byteLength(string[, encoding])

var len = Buffer .byteLength("你好世界Hello' , "utf8 ' );console.log(len); 

4.判断一个对象是否是Buffer类型对象

// Buffer.isBuffer(obj)

// obj

//Returns:

// Returns true if obj is a Buffer, false otherwise.

5.获取Buffer中的某个字节

//根据索引获取Buffer中的某个字节( byte、 octet)l/ buf[index]

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

6、获取Buffer对象中的字节的个数

//buf.length

//注意: length属性不可修改

一个utf8数字占1个字节

一个utf8英文字母占1个字节

7.已过时的 API

//以下 API已全部过时

new Buffer(array )new Buffer( buffer)

new Buffer( arrayBuffer[ , byteoffset [,length]])new Buffer(size)

new Buffer( string[, encoding])


四、Buffer 属性

Buffer 的属性

容量(capacity):缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变

上界(limit):缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数

位置(position):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新

标记(mark):下一个要被读或写的元素的索引。位置会自动由相应的 get( )和 put( )函数更新一个备忘位置。调用 mark( )来设定 mark = postion。调用 reset( )设定 position =mark。标记在设定前是未定义的(undefined)。

这四个属性之间总是遵循以下关系:0 <= mark <= position <= limit <= capacity

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
6月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
322 69
|
安全 网络安全 API
163邮箱IMAP服务器设置方法
```markdown 使用IMAP协议同步163邮箱:登录邮箱→设置→账户→IMAP/SMTP→开启服务→配置服务器(imap.163.com:993, SSL/TLS)→设置用户名和密码→保存并在邮件客户端添加账号。确保多设备邮件同步,定期更新设置。[≤240字符] ```
|
机器学习/深度学习 传感器 算法
【信号处理】基于Matlab实现男女音变声系统
【信号处理】基于Matlab实现男女音变声系统
|
前端开发 JavaScript
【面试题】async/await、promise和setTimeout的执行顺序
【面试题】async/await、promise和setTimeout的执行顺序
209 0
|
8月前
|
人工智能 固态存储 iOS开发
5分钟搞定Photoshop 2025安装:官方下载+许可证激活避坑指南
Adobe Photoshop 2025 是 Adobe 公司推出的最新图像处理软件,广泛应用于平面设计、摄影后期和 UI 设计等领域。其核心功能包括智能 AI 工具(一键抠图、生成填充等)、高效工作流(优化图层管理与色彩调整)、跨平台兼容(支持 Windows 11 和 macOS 15)以及云协作功能(与 Adobe Creative Cloud 集成)。本文详细介绍软件的安装流程、系统要求、正版激活方法及常见问题解决方案,并提供扩展学习资源,帮助用户更好地掌握这款强大工具。
29688 3
|
4月前
|
Web App开发 iOS开发
油猴(tampermonkey)离线安装包下载,油猴插件离线版下载
Tampermonkey(油猴)是一款流行的浏览器脚本管理插件,允许用户自定义网页功能。通过安装脚本,可增强浏览器体验。本文介绍其在Chrome浏览器上的安装方法,包括下载CRX文件并拖拽安装的步骤。
2033 0
|
10月前
|
存储 人工智能 运维
摊牌了,代码不是我自己写的
本文介绍了如何使用阿里云函数计算FC部署Qwen2.5开源大模型。Qwen2.5支持128K上下文长度和92种编程语言,通过Ollama托管和Open WebUI交互界面实现快速部署与高效调用。函数计算FC提供免运维环境,支持弹性扩容,开发者只需简单配置即可上线新功能。部署流程包括创建Ollama应用、配置Open WebUI及获取内网访问地址等步骤。应用体验部分展示了如何通过Open WebUI调用Qwen2.5进行多语言交流、解答数学题和文档总结等功能。此外,函数计算FC的自动扩缩容机制可根据请求量动态调整实例数量,提高资源利用率并降低成本。
1069 26
摊牌了,代码不是我自己写的
|
12月前
|
编解码 缓存 算法
视频帧里的I帧、P帧、B帧是什么?
I帧、P帧、B帧是视频编码中的基本概念。I帧是帧内编码帧,无需参考其他帧即可解码;P帧是前向预测编码帧,基于前一帧解码;B帧是双向预测编码帧,基于前后帧解码。IDR帧是一种特殊的I帧,用于即时解码刷新,防止错误传播。GOP(Group of Pictures)是一组连续的画面,第一个帧为I帧,gop_size设置越大,画质越好,但解码延迟增加。OpenGOP允许GOP间的帧依赖,而ClosedGOP则不允许。DTS(解码时间戳)和PTS(显示时间戳)分别用于解码和显示时间控制。
|
12月前
|
前端开发
使用 Promise.all 处理多个 Promise 同时失败的情况
【10月更文挑战第26天】通过以上几种方法,我们可以根据具体的需求和环境选择合适的方式来处理多个 `Promise` 同时失败的情况,从而更好地进行错误处理和程序的稳定性保障。
821 2
|
安全 中间件 编译器
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
【C/C++ 原子操作】深入浅出:从互斥锁到无锁编程的转变 - 理解C++原子操作和内存模型
6386 3
下一篇
开通oss服务