JS中ArrayBuffer、Uint8Array、Blob与文本字符之间的相互转换

前端 File 上传、下载,Canvas 保存图片,AjaxFetch 二进制流传输,PDF 预览,浏览器上 WebAssembly 的应用 等等都需要用到 ArrayBufferBlob 。文件就具体介绍一下这些对象的相互转换。

Javascript 二进制对象

API介绍

  1. FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 FileBlob 对象指定要读取的文件或数据。
  2. Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ReadableStream 来用于数据操作。Blob 表示的不一定是 JavaScript 原生格式的数据。File 接口基于 Blob,继承了 blob 的功能并将其扩展使其支持用户系统上的文件。
  3. ArrayBuffer 对象代表储存二进制数据的一段内存,它不能直接读写,只能通过视图(TypedArray 视图和 DataView 视图)来读写,视图的作用是以指定格式解读二进制数据。
  4. Uint8Array 对象是 ArrayBuffer 的一个数据类型(8 位不带符号整数)。
  5. TextEncoder 接受代码点流作为输入,并提供 UTF-8 字节流作为输出。
  6. TextDecoder 接口表示一个文本解码器,一个解码器只支持一种特定文本编码,例如 utf-8、iso-8859-2、koi8、cp1261,gbk 等等。解码器将字节流作为输入,并提供代码点流作为输出。

注意: 二进制数组并不是真正的数组,而是类似数组的对象。

字符与ArrayBuffer,Uint8Array相互转换

  1. TextEncoder => ArrayBuffer
let encoder = new TextEncoder();

// 字符 转 Uint8Array
let uint8Array = encoder.encode("你好啊");

// Uint8Array 转 ArrayBuffer
let arrayBuffer = uint8Array.buffer
  1. Blob => ArrayBuffer
let str = 'hello,你好吗?'
let blob = new Blob([str],{type:'text/plain;charset=utf-8'});
let utf8decoder = new TextDecoder()
blob.arrayBuffer().then(buffer=>{
  // ArrayBuffer
  console.log(buffer)
  let text = utf8decoder.decode(buffer)
  // String
  console.log(text)
})
  1. FileReader => ArrayBuffer
let str = 'hello,你好吗?'
let blob = new Blob([str],{type:'text/plain;charset=utf-8'});
let utf8decoder = new TextDecoder()
let fr = new FileReader()
fr.readAsArrayBuffer(blob)
fr.onload = function(res) {
  // ArrayBuffer
  let buffer = fr.result
  console.log(buffer)
  let text = utf8decoder.decode(buffer)
  // String
  console.log(text)
}

欢迎访问:天问博客

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JavaScript 提供了多种方式来保存 ArrayBufffer。下面我将介绍两种常用的方法。 方法一:使用 File 对象保存 ArrayBufffer 你可以创建一个新的 File 对象,并将 ArrayBufffer 写入其。首先,我们需要使用一个 Blob 对象将 ArrayBufffer 数据包装起来,然后将 Blob 对象传递给 File 构造函数创建一个新的文件。示例代码如下: ```javascript function saveArrayBuffer(arrayBuffer, fileName) { const blob = new Blob([arrayBuffer], { type: 'application/octet-stream' }); const file = new File([blob], fileName); // 使用文件保存框下载文件 const link = document.createElement('a'); link.href = URL.createObjectURL(file); link.download = fileName; link.click(); } ``` 方法二:使用本地存储保存 ArrayBufffer 另一种常见的方法是使用本地存储(LocalStorage 或者 SessionStorage)保存 ArrayBufffer。LocalStorage 和 SessionStorage 通常用于存储字符串类型的数据,但我们可以将 ArrayBufffer 转换为 BASE64 编码的字符串,并进行存储。示例代码如下: ```javascript function saveArrayBuffer(arrayBuffer, key) { const base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer))); localStorage.setItem(key, base64String); } ``` 注意:由于 LocalStorage 和 SessionStorage 的存储空间受到限制,建议只在 ArrayBufffer 较小的情况下使用该方法。 以上就是两种常用的保存 ArrayBufffer 的方法。你可以根据具体需求选择合适的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值