JavaScript中的二进制数据处理方法详解

 更新时间:2023年06月09日 10:36:59   作者:饺子不放糖  
Blob、ArrayBuffer和Buffer是JavaScript中用于表示和操作二进制数据的三种主要方式,本文将深入探讨这些概念,以及它们如何在JavaScript中使用,需要的可以参考一下

在Web开发和Node.js中,处理二进制数据是非常重要的。Blob、ArrayBuffer和Buffer是JavaScript中用于表示和操作二进制数据的三种主要方式。本文将深入探讨这些概念,以及它们如何在JavaScript中使用。

Blob

Blob对象是不可变的类文件对象,它可以包含任何类型的数据,例如图像、音频、视频等等。与字符串或数组不同,Blob对象可以有效地处理大型二进制文件而无需将其全部加载到内存中。

创建Blob对象最常见的方法是使用new Blob([array], [options])构造函数。第一个参数是一个数组,其中包含要包含在Blob对象中的数据。第二个参数是一个可选对象,用于指定Blob对象的类型、结束字符、MIME类型等。

以下示例演示了如何使用Blob对象创建一个包含文本数据的Blob:

const data = "Hello, world!";
const blob = new Blob([data], { type: "text/plain" });

您还可以在浏览器中使用FileReader API从Blob中读取数据,并将其显示为图像或文件。以下示例演示了如何将Blob转换为DataURL以显示图像:

const blob = new Blob([binaryImage], { type: 'image/png' });
const reader = new FileReader();
reader.onload = function(e) {
  const imgElement = document.createElement('img');
  imgElement.src = e.target.result;
  document.body.appendChild(imgElement);
};
reader.readAsDataURL(blob);

ArrayBuffer

ArrayBuffer是一种表示通用内存缓冲区的对象。与Blob不同,ArrayBuffer并没有任何类型信息;它只是一个连续的、固定长度的二进制数据块。ArrayBuffer通常用于处理大量数据,并且可以通过TypedArray或DataView进行操作。

使用ArrayBuffer创建二进制数据缓冲区非常简单:

const buffer = new ArrayBuffer(8);

这将创建一个包含8个字节的二进制数据缓冲区。要访问缓冲区中的数据,您需要使用TypedArray来引用它,例如Uint8Array或Float64Array等。

以下示例演示了如何使用Uint8Array从ArrayBuffer读取和修改数据:

const buffer = new ArrayBuffer(8);
const view = new Uint8Array(buffer);

view[0] = 1;
view[1] = 2;
view[2] = 3;
view[3] = 4;

console.log(view); 
// 输出 Uint8Array [ 1, 2, 3, 4, 0, 0, 0, 0 ]

Buffer

在Node.js中,Buffer是一种全局对象,用于表示二进制数据。Buffer对象可以直接访问和修改其内容,因此它比Blob和ArrayBuffer更适合网络编程或文件系统操作。

以下示例演示了如何使用Buffer对象以utf-8编码将字符串转换为二进制数据:

const data = "Hello, world!";
const buffer = Buffer.from(data, "utf8");

Buffer对象还有其他操作方法,例如将两个Buffer对象连接起来、将Buffer对象转换为字符串或从Buffer对象中读取数据。

以下示例演示了如何使用Buffer对象在Node.js中读取文件并计算其哈希值:

const fs = require('fs');
const crypto = require('crypto');

const fileData = fs.readFileSync('/path/to/file.dat');
const hash = crypto.createHash('sha256').update(fileData).digest('hex');

console.log(hash);
//输出: 4c78da5e3b418c2bdff384a25f22df0a8d6f7aa2db1a37164fb699f6cd5af631

Blob、ArrayBuffer和Buffer之间的转换

在JavaScript中,您可以轻松地将Blob、ArrayBuffer和Buffer之间相互转换。以下是几种常见的转换方法:

ArrayBuffer转Blob:使用Blob的构造函数,将ArrayBuffer作为参数传递给它。

const buffer = new ArrayBuffer(4);
const blob = new Blob([buffer], { type: 'application/octet-stream' });

Blob转ArrayBuffer:使用FileReader对象的readAsArrayBuffer()方法。

const blob = new Blob([data], { type: 'image/png' });
const reader = new FileReader();
reader.readAsArrayBuffer(blob);
reader.onload = function () {
  const buffer = reader.result;
};

Buffer转ArrayBuffer:使用Buffer的.buffer属性

const buffer = Buffer.from('Hello, world!', 'utf8');
const arrayBuffer = buffer.buffer;

ArrayBuffer转Buffer:使用Buffer.from()静态方法

const arrayBuffer = new ArrayBuffer(8);
const buffer = Buffer.from(arrayBuffer);

总结

在Web开发和Node.js中处理二进制数据是非常重要的。Blob、ArrayBuffer和Buffer是JavaScript中用于表示和操作二进制数据的三种主要方式。选择正确的二进制数据类型对于有效地处理大量数据至关重要,因此您应该根据需要选择适当的类型。

本文介绍了如何创建、读取、修改、转换Blob、ArrayBuffer和Buffer以及它们在Web浏览器和Node.js中的使用示例。学会这些概念和技巧可以帮助您更好地处理二进制数据,并提高应用程序性能和可靠性。

到此这篇关于JavaScript中的二进制数据处理方法详解的文章就介绍到这了,更多相关JavaScript二进制数据处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于JS实现01支付后的10秒倒计时

    基于JS实现01支付后的10秒倒计时

    这是一个通过js实现的支付后的页面,点击支付会跳出一个弹窗,提示你是否要确定支付,确定后进入付后界面,该页面有着10秒倒计时,计时结束后便会返回原界面,也可以选择立刻返回,来返回主页面,这篇文章主要介绍了基于JS实现01支付后的10秒倒计时,需要的朋友可以参考下
    2023-03-03
  • JavaScript纯色二维码变成彩色二维码

    JavaScript纯色二维码变成彩色二维码

    这篇文章主要为大家详细介绍了JavaScript纯色二维码变成彩色二维码的方案,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • JavaScript实现强制重定向至HTTPS页面

    JavaScript实现强制重定向至HTTPS页面

    这篇文章主要介绍了JavaScript实现强制重定向至HTTPS页面,本文讲解如何用JS实现HTTP重定向HTTPS或者HTTPS跳转到HTTP,需要的朋友可以参考下
    2015-06-06
  • ReactHooks+ts(函数组件)实现原生轮播的示例

    ReactHooks+ts(函数组件)实现原生轮播的示例

    这篇文章主要介绍了ReactHooks+ts函数组件实现原生轮播,在这里下载依赖第一个是js依赖第二个是ts依赖,通过实例代码介绍了创建tsx文件的方法,需要的朋友可以参考下
    2022-05-05
  • JavaScript中的return布尔值的用法和原理解析

    JavaScript中的return布尔值的用法和原理解析

    这篇文章主要介绍了JavaScript中的return布尔值的用法和原理解析,需要的朋友可以参考下
    2017-08-08
  • js实现Form栏显示全格式时间时钟效果代码

    js实现Form栏显示全格式时间时钟效果代码

    这篇文章主要介绍了js实现Form栏显示全格式时间时钟效果代码,可读取当前的完整时间并实时显示,非常具有实用价值,需要的朋友可以参考下
    2015-08-08
  • js取模(求余数)隔行变色

    js取模(求余数)隔行变色

    今天需要用js实现做隔行变色功能,原来用的是asp程序都是用mod取模,原来js中用的是%,具体如下需要的朋友可以参考下
    2014-05-05
  • 基于JavaScript实现图片裁剪功能

    基于JavaScript实现图片裁剪功能

    在前端开发中,当遇到图片或头像上传等功能时,有尺寸分辨率限制的话,就需要用到图片的裁剪功能。本文为大家介绍了JavaScript实现图片裁剪功能的示例代码,希望对大家有所帮助
    2023-02-02
  • electron-builder允许安装时请求提升权限的场景分析

    electron-builder允许安装时请求提升权限的场景分析

    electron-builder 作为一个用于 Electron 应用程序打包的工具,需要下载并使用 Electron 运行时来创建可执行文件,这篇文章给大家介绍electron-builder允许安装时请求提升权限的相关知识,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Google的跟踪代码 动态加载js代码方法应用

    Google的跟踪代码 动态加载js代码方法应用

    Google的跟踪代码 动态加载js代码,需要的朋友可以参考下
    2012-11-11

最新评论