nodejs中Buffer、ArrayBuffer、DataView详解

Node.js学习七(buffer缓冲区) 文章目录前言一、什么是Buffer对象二、Buffer应用1、Buffer.alloc(size[, fill[, encoding]])2、Buffer数据转为字符串3、Buffer.from()(1)Buffer.from(array)(2)Buffer.from(arrayBuffer[, byteOffset[, length]])(3)Buffer.from(buffer)(4)Buffer.from(string[, encoding])(5)举例4、拷贝Buffer实例5、缓冲区与字符编码6、 阅读详情

Buffer是nodejs独有的。ArrayBuffer是符合ES标准的。

前言

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。ArrayBuffer 不能直接操作,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

DataView 视图是一个可以从 ArrayBuffer 对象中读写多种数值类型的底层接口,使用它时,不用考虑不同平台的字节序问题。

即ArrayBuffer为二进制数据的存储区域。但是ArrayBuffer的读写,都需要通过DataView来执行。同时DataView提供有.buffer可以直接返回其操作的ArrayBuffer。

var ab=new ArrayBuffer(length);
var dv = new DataView(ab);
dv.setInt8(0,data)
dv.getUint8(0)
var buffer=dv.buffer;

Buffer是Nodejs提供的可以直接操作二进制数据的类。

DataView读写方法内存参考

setInt8:写入1个字节的8位整数。
setUint8:写入1个字节的8位无符号整数。
setInt16:写入2个字节的16位整数。
setUint16:写入2个字节的16位无符号整数。
setInt32:写入4个字节的32位整数。
setUint32:写入4个字节的32位无符号整数。
setFloat32:写入4个字节的32位浮点数。
setFloat64:写入8个字节的64位浮点数,

getInt8:读取1个字节,返回一个8位整数。
getUint8:读取1个字节,返回一个无符号的8位整数。
getInt16:读取2个字节,返回一个16位整数。
getUint16:读取2个字节,返回一个无符号的16位整数。
getInt32:读取4个字节,返回一个32位整数。
getUint32:读取4个字节,返回一个无符号的32位整数。
getFloat32:读取4个字节,返回一个32位浮点数。
getFloat64:读取8个字节,返回一个64位浮点数。

Buffer、ArrayBuffer互转

  • Buffer和ArrayBuffer互转 法一
//Buffer转ArrayBuffer
function toArrayBuffer(buf) {
	var ab = new ArrayBuffer(buf.length);
	var view = new Uint8Array(ab);
	for (var i = 0; i < buf.length; ++i) {
		view[i] = buf[i];
	}	
	return ab;		
}

//ArrayBuffer转Buffer
function toBuffer(ab) {
	var buf = new Buffer(ab.byteLength);
	var view = new Uint8Array(ab);
	for (var i = 0; i < buf.length; ++i) {
		buf[i] = view[i];
	}
	return buf;
}
  • Buffer和ArrayBuffer互转 法二
// Buffer转ArrayBuffer
const buf = Buffer.from("this is a test");
console.log(buf);
console.log(buf.toString());
var arrayBuf = buf.buffer; //
console.log(arrayBuf);

在这里插入图片描述

//ArrayBuffer转Buffer
var arrayBuffer = new ArrayBuffer(16);
const buffer = Buffer.from(arrayBuffer);
console.log(buffer.buffer === arrayBuffer);

在这里插入图片描述

二进制_JavaScript里面的二进制 基础知识点ECMAScript中的进制ES中进制规范基于C语言,随着发展然后进行了改进。下面列举JavaScript不同进制写法:// 二进制 Binary system // 以0b或0B开头 var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648 var FLT_EXPONENT = 0b011111111000... 阅读详情

相关推荐

TypeScript视频生成框架:可运行、可调试、可扩展的AIGC工程骨架

视频生成是多模态AI的核心应用之一,其本质是将文本提示词映射为有序帧序列,并完成时间轴调度、像素渲染与状态协同。理解该过程需掌握数据流建模、异步帧管理、Canvas/WebGL渲染优化等前端工程能力。TypeScript凭借强类型约束、模块化接口契约和编译期校验,在应用集成层显著提升稳定性与可维护性,尤其适用于需要快速验证原型、对接AI服务API或构建垂直场景(如教育演示、电商短视频)的轻量级视频合成系统。本文提供一套真实可运行、结构解耦、含完整调度-生成-渲染三层架构的TypeScript源码实现,覆盖从

weixin_34221332的博客 556

Node.js中Buffer的一些实现原理

在ES6之前,JavaScript无法直接处理二进制数据,Node.js为了弥补这个不足引入了 Buffer,其是Node.js的核心模块之一,底层实现基于C++。本文将从 Node.js v14.20.0 的源码分析 Buffer 的一些实现原理。

Wopelo的博客 1778

4D毫米波雷达

详解4D成像毫米波雷达

sangba2019的博客 2393

js中ArrayBuffer和node中Buffer的关系和区别

js中ArrayBuffer和node中Buffer的关系

有一棵树的博客 2157

DCDC BUCK开关电源PCB设计

在开关电源中,BUCK(降压)电路、BOOST(升压)电路以及BUCK - BOOST(升降压)三种电路是最基本的拓扑结构。转换器又分DCDC(直流转直流)和ACDC(交流转直流),DCDC装换器结构无疑是比ACDC转换器结构简单,所以从DCDC转换器结构入手学习开关电源是一种很好的选择。本文主要从应用角度,进行相关器件的选型计算以及PCB绘制讲解DCDC 12V转5Vbuck电路。

2301_78342510的博客 6885

【报错】sqli-labs靶场搭建出现“Unable to connect to the database: security”

搭建sqli-labs靶场时,“Unable to connect to the database: security”报错解决

九芒星的博客 2992

Node.js中的ArrayBuffer与Buffer对比分析

是ECMAScript 6(ES6)引入的一个标准对象,用于表示固定长度的原始二进制数据缓冲区。它是一个字节数组,但你不能直接操作其内容,而是需要通过TypedArray(如Uint8Array等)或DataView视图来读写。固定长度:一旦创建,其长度不可更改。连续内存空间:表示一段连续的内存区域,用于存储二进制数据。不能直接读写:必须通过视图(TypedArray或DataView)来操作。和Buffer都是Node.js中处理二进制数据的重要工具,但它们在设计、使用场景和性能上存在差异。

1303

【电脑技巧】CPU正常运行时间过长,怎么解决?

目录 问题描述 解决方案 1、问题描述 不少同志都遇到过这样的问题:按【Ctrl + alt + delete】打开任务管理器,切到“性能”选项卡下,发现自己电脑的CPU正常运行时间竟然为好几十天!很多人担心这会不会影响电脑的寿命?于是很想知道这是怎么回事,以及如何解决这个问题。 我在此解答一下,这是由于你的电脑开启了“快速启动”这一选项的缘故,只要把这一选项关闭,问题就解决了。 2、解决方案 怎样关闭“快速启动”呢?按照如下的步骤来即可。 顺便声明一下,笔者的电脑配置: 使用电脑:联想Yoga 14

橄榄树下的孩子 3万+

core-js 缺失问题

解决方案: 找到node_modules 删除下面的三个文件。问题:core-js缺少个别文件。

weixin_48702212的博客 1351

AgentScope 实战训练营-构建元规划智能体(Meta Planner Agent)—— 从 0 到 1 完整实现

本文介绍了基于AgentScope框架开发的元规划智能体(Meta Planner Agent)系统。该系统通过任务拆解和子代理编排机制,实现复杂任务的自动化处理。核心架构分为用户层、规划器层和子代理层,其中规划器作为"项目经理"负责任务分解、创建子代理并协调执行流程。关键技术包括AgentScope多智能体框架、DashScope大语言模型、PlanNotebook计划管理工具等。

program哲学 359

自动驾驶模拟器:基于 Python + Carla,在家也能训练一个“L4 级”自动驾驶 AI 模型

市面上有很多模拟器(AirSim, LGSVL),但 Carla 是目前学术界和工业界最主流的选择。画质强:基于 UE4,光影、天气(下雨、夕阳)极其逼真,这对训练视觉模型至关重要。API 爽:完全使用 Python 控制,对 AI 工程师极度友好。资产多:内置各种车辆、行人、交通信号灯、城市地图。编写 Python 代码,让车自己在城市里跑,通过摄像头看到路况,自己决定怎么打方向盘。通过 Carla,我们把价值数百万的自动驾驶测试场搬进了电脑。

BUG猿的博客 269

云函数(nodejs)中Buffer、ArrayBuffer、DataView互相转化

我们都知道小程序云函数是基于nodejs开发,小程序前端是基于es开发,所以前端有ArrayBuffer这个类型,却没有Buffer这个类型,这样使用时很不方便,例如非法图片鉴定imgSecCheck这个api就需要Buffer参数调用,所以其中一个思路就是可以将前端获取到的ArrayBuffer传递给云函数,再转化成Buffer,另一种思路可以参考小程序imgSecChec云函数调用这篇文章,因...

WeiHan_Seven的博客 1642

GD32F4xx 移植agile_modbus软件包与电能表通信

GD32F4XX 移植agile modbus软件包实现与DTSU电能表通信调试记录

madao1234的博客 1306

Blob File Buffer ArrayBuffer uint8Array DataView 的关联

const arrayBuffer = new ArrayBuffer(16) //固定长度的原始二进制缓冲区,不能直接操作,需要使用【视图】 如 TypedArray 和 DataView。TypedArray 家族包括 Uint8Array Int8Array Uint16Array Int16Array 等。buffer 是对 Unit8Array 的子类、专为I/O优化,ArrayBuffer 二进制数据的基石。from(可以是TypedArray等)

gu2022_3_5_21_23的博客 254

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 564

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

1.1Nodejs和浏览器中的二进制处理

安装以及初体验.可以参考前端专栏的第七章7.nodejs和npm简单使用_npmjs官网-优快云博客浏览器的javascriptnodejs的javascript在 Node.js 中,没有window或document全局对象,所以不能使用浏览器中的DOM和BOM对象。Node.js 提供了许多核心模块,如fs(文件系统)、http(网络请求)等,这些是在浏览器环境中无法直接使用的。以下对象不能再Nodejs中使用。

chxii的专栏 1455

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Bun技术评估 - 21 二进制(Binary Data)

本文探讨的内容包括ArrayBuffer、DataView、TypedArray、Buffer、Blob、File/BunFile、Stream等二进制信息和处理相关的概念和技术

hehehaha2025的博客 203

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Cline本地模型实战:用Ollama和LM Studio零成本免费运行AI编程助手

Cline 是一款运行在 IDE 中的自主 AI 编程助手,能创建/编辑文件、运行命令、使用浏览器。本文带你用 **Ollama** 和 **LM Studio** 在本机运行 Cline 本地模型:无 API 账单、代码不出机器、断网也能干活,实现零成本私有化编程助手。 ## 为什么选择本地模型运行 Cline?💡 用 Ollama 或 LM Studio 在本地跑模型,Cline 拥有三

gitblog_00316的博客 114

Node.js v5.10.0 发布解析:npm 3.8.3 安全修复与 Buffer、fs、REPL 系列增强

本篇技术解读基于 nodejs.org 官网仓库中的官方发布公告 [v5.10.0.md](https://link.gitcode.com/i/cbadcc43cf1e667484b4fb4176d8bf41),完整梳理 Node.js v5.10.0(Current 分支)的发布背景、安全更新、全部重要变更与提交清单,并结合仓库内的发布博客生成工具链,说明这类发布公告是如何从 changelo

gitblog_01065的博客 922

脑语言2500单字v1.5.1

如果人和 AI 说同一种语言,文明会怎样?我用 2500 个单字试了试。2500个单字是不同领域、不同知识的共同体,无论你学编程或者是数学或写作,你都要用汉字,而常用的2500个汉字几乎可以涵盖不同行业做的不同事情。

脑语言 2009

JS/node:Blob、ArrayBuffer和Buffer

我们首先来介绍Blob,Blob是用来支持文件操作的。简单的说:在JS中,有两个构造函数 File 和 Blob, 而File继承了所有Blob的属性。所以在我们看来,File对象可以看作一种特殊的Blob对象。在前端工程中,我们在哪些操作中可以获得File对象呢?请看:(备注:目前 File API规范的状态为Working Draft)我们上面说了,File对象是一种特殊的Blob对象,那么它自然就可以直接调用Blob对象的方法。让我们看一看Blob具体有哪些方法,以及能够用它们实现哪些功能。

偏执 1727

【物联网】nodejs的Buffer替换为js的ArrayBuffer

最近在研发智能门锁的指纹采集,在pc端采集的时候使用的是一个指纹采集器,业务系统和指纹采集器之间通信使用websocket,通信报文如下:包头(4字节)类型(1字节)序号(2字节)标识(1字节)长度(4字节)数据块(变长)。

蜗牛的高铁 3120

NodeJS 中的 Buffer 究竟是什么

在 Stream 篇结中,我们留下了一个问题,下述代码输出的 chunk 是一个什么东西?通过打印,我们发现 chunk 是 Buffer 对象,其中的元素是16进制的两位数,即0~255的数值说明在 Stream 中流动的数据就是 Buffer,那下面就让我们来探究一下 Buffer 的真实面目!🤔 Node 中为什么要引入 Buffer?最开始的时候 JS 只在浏览器端运行,对于 Unicode 编码的字符串容易处理,但是对于二进制和非 Unicode 编码的字符串处理困难。

梅花寺 1350

arraybuffer操作_ArrayBuffer 和 Buffer 有何区别?

首先说结论,ArrayBufferBufferArrayBuffer 的视图,是 TypedArray1. Buffer 是一个用于操作 ArrayBuffer 的视图(view)当我们创建了一个 Buffer 对象后,我们可以通过Buffer对象的 buffer 属性来直接访问其对应的 ArrayBuffer 对象。从Node的代码来看,一个 Buffer 对象(或者说是 FastBuffer)...

weixin_39703551的博客 1211

详解Blob、File、FileReader、ArrayBuffer、ArrayBufferView、DataURL、URL对象

本文深入介绍HTML5里的几种对象:Blob、File、FileReader、ArrayBuffer、ArrayBufferView、DataURL、URL 一. Blob 一个Blob对象就是一个包含有只读原始数据的类文件对象。Blob对象中的数据并不一定得是JavaScript中的原生形式。File接口基于Blob,继承了Blob的功能,并且扩展支持了用户计算机上的本地文件。 B...

細水、長流√的专栏 5618

Node.js学习--Buffer类和fs模块

buffer类,专门存放二进制数据的缓冲区 1.创建Buffer对象 Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0 Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据 Buffer.allocUnsafeSlow(size) Buffer.from(array): 返回一个被...

767
上一篇: 三种通信方式——单工、半双工和双工通信
下一篇: [CocosCreator]记一次H5项目的物理优化
iningwei
博客等级 码龄10年 1999粉丝 327原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iningwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值