从上传图片的过程认识Stream 和Buffer 您所在的位置:网站首页 imageinputstream怎么写到本地文件 从上传图片的过程认识Stream 和Buffer

从上传图片的过程认识Stream 和Buffer

2024-02-01 14:04| 来源: 网络整理| 查看: 265

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

遇到这样的业务场景:一张图片,传递给第三方(第三方以接口形式接收),且图片是二进制数据,是binary类型。

在我的初印象中,对于图片的操作都会转化成 stream或者base64,如果传递二进制数据是不是应该传递的是一些二进制字符串?还是buffer类型?还是Stream?

今天在官网中JavaScript对Buffer类的定义看到一句话:

JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。

重新深入学习一下,流?二进制数据流?Buffer?

Stream:流 流是用于在 Node.js 中处理流数据的抽象接口 是一个逻辑概念,是对输入输出设备(网络、文件、图片)的抽象 是一系列数据从A处传输到B处过程的数据流 场景:大文件,大数据通过流传输,可以不用等数据都传输完再进行下一步工作 Buffer:缓冲区 通常上,缓存区,就是一个物理存储区域,但是在node中Buffer类是二进制数据抽象类型 Buffer 对象用于表示固定长度的字节序列

通过一个Demo:通过fs模块,读取一张图片获取到图片的文件流

const fs = require('fs'); const path = require('path'); ​ ( async () =>{    getFiles(); })(); ​ // 读取文件 function getFiles() {   const fileStream =  fs.createReadStream(path.join(__dirname,'./test111.jpg'));   console.log(fileStream); }

fileStream是fs.ReadStream类型,又继承自stream.Readable类,所以通过createReadStream读取的图片数据就是个二进制数据流,将此数据传递给第三方接口时可以正常传输。

之前因为自己对Binary类型执着,一直以为stream,buffer,binary是三种数据类型,而binary 是Buffer的一种编码方式,nodejs没有binary数据类型,都是通过Buffer类来处理二进制数据。但是有时候类似文件或者网络比较大的数据时,Buffer无法支持时,可使用stream。

参考资料:

nodejs.cn/api/buffer.… nodejs.cn/api/stream.…


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有