nodejs流读取二进制文件

devtools/2024/12/21 23:11:59/

创建可读流

首先,我们使用 fs.createReadStream 方法创建一个指向二进制文件的可读流。这个方法接收一个文件路径作为参数,并返回一个 ReadStream 对象。

const readStream = fs.createReadStream('example.bin');

这行代码会打开 example.bin 文件,并准备从中读取数据。ReadStream 对象是一个可读流,它实现了 Node.js 中的 stream.Readable 接口。

监听数据事件

接下来,我们监听 ReadStream 对象的 data 事件。这个事件会在流读取到数据块时触发。

readStream.on('data', (chunk) => {// 处理二进制数据块console.log('读取到数据块:', chunk);
});

data 事件触发时,它的回调函数会接收一个参数 chunk,这是一个 Buffer 对象,包含了读取到的二进制数据块。在这个回调函数中,你可以处理这些数据,比如将它们写入到另一个文件、发送到网络客户端、或者进行解析和转换。

处理 Buffer 对象

Buffer 对象是 Node.js 中用来处理二进制数据的类。它提供了一系列的方法来操作二进制数据,比如读取和写入特定类型的数据(如整数、浮点数、字符串等)、进行缓冲区的切片、复制、拼接等操作。

在上面的示例中,chunk 就是一个 Buffer 对象。你可以使用 Buffer 类的方法来处理它,比如使用 chunk.toString() 方法将二进制数据转换为字符串(如果你知道数据的编码)。

监听结束和错误事件

除了 data 事件,我们还监听了 enderror 事件。

readStream.on('end', () => {console.log('读取完成。');
});readStream.on('error', (error) => {console.error('读取文件时发生错误:', error);
});

当没有更多数据可读时,end 事件会被触发,这时你可以执行一些清理工作,比如关闭文件、释放资源等。

如果在读取过程中发生错误,比如文件不存在、权限不足等,error 事件会被触发,并且它的回调函数会接收一个 Error 对象作为参数,你可以使用这个对象来获取错误信息并进行处理。

总结

通过使用 Node.js 中的流和 Buffer 类,你可以高效地处理二进制数据。流允许你分块地读取和写入数据,而不需要一次性将整个文件内容加载到内存中。Buffer 类则提供了丰富的方法来操作二进制数据。这种组合使得 Node.js 在处理大型文件和网络通信方面非常强大和高效。


http://www.ppmy.cn/devtools/90446.html

相关文章

光学知识 | 什么是共封装光学?

共封装光学(CPO)是一种旨在通过将通信所需的重要元件(即光学及电子元件)更紧密地结合在一起,解决当今数据密集网络中日益增长的带宽密度、通信时延、铜线传输距离以及电源效率挑战的方案。 行业目前采用了光互连输入输…

代理模式学习

代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象…

字符串的模拟算法(思路+例题)

👏大家好!我是和风coding,希望我的文章能给你带来帮助! 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝点击 我的主页 还可以看到和风的其他内容噢&#x…

cqyjldfx

CVE-2023-27179 靶标介绍: GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞,漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。攻击者可以通过向 filename 参数传递恶意输入来下载服务器上的任意文件。 提示有本地文件泄露&a…

面试笔记8.6

缓存 1.如何保证redis与数据库一致性 redis面试:如何保证缓存和数据库数据的一致性?_使用update更新数据,json缓存不更新-CSDN博客 如果先删除缓存,再删除数据库,数据不一致, 解决 删 1.先操作缓存但不删除缓存&…

Leetcode—400. 第 N 位数字【中等】

2024每日刷题&#xff08;151&#xff09; Leetcode—400. 第 N 位数字 算法思想 参考自k神 实现代码 class Solution { public:int findNthDigit(int n) {int digitSize 1;int startNum 1;long long count 9;while(digitSize * count < n) {n - count * digitSize;di…

【区块链+医疗健康】区块链 + 个人影像云 | FISCO BCOS应用案例

尽管当前大数据和云计算技术已逐步成熟&#xff0c;医院之间的“数据孤岛”仍大量存在&#xff0c;制约着医疗影像数据流通和价 值实现&#xff0c;而区块链技术出现为医疗影像数据可信共享提供了新思路。个人影像云应用基于 FISCO BCOS 区块链底层平台、实体身份标识及可信数据…

PCIe学习笔记(16)

层次结构&#xff08;Hierarchy&#xff09;ID Message &#xff08;PCIe I/O 互连的树形拓扑结构称为 PCIe 的 Hierarchy&#xff0c;或称层级、层次&#xff08;不是事务层、数据链路层的“层”&#xff09;。层次区域是指与 RC 某一 RP 相关联的所有设备和链路组成的线路结…