作者:清醒还是迷惘_123 | 来源:互联网 | 2022-12-09 17:05
我想将缓冲区数据转换为字节数组。这是我尝试过的
import * as fs from 'fs';
[...]
event:(data) => {
fs.readFile(data, function(err, data) {
var arrByte= new Uint8Array(data)
var binaryData= new Blob([arrByte])
console.log(binaryData)
}
}
我的职位尚未发布。我非常想知道我在做什么,这是不对的。
1> josh3736..:
这些Buffer
文档很有启发性:
在引入之前TypedArray
,Javascript语言没有用于读取或处理二进制数据流的机制。该Buffer
班介绍了作为Node.js的API来实现与八位字节流中的TCP流,文件系统操作,以及其他环境交互的一部分。
与TypedArray
现在可用的,所述Buffer
类实现Uint8Array
的方式的API,更优化和适合Node.js的
…
缓冲区实例也是Uint8Array
实例。但是,与存在一些细微的不兼容TypedArray
。例如,在ArrayBuffer#slice()
创建切片的副本时,的实现Buffer#slice()
会在Buffer
不复制的情况下创建现有视图,从而使Buffer#slice()
效率大大提高。
还可以从Buffer中创建新的TypedArray实例,但要注意以下几点:
的Buffer
对象的存储器被复制到TypedArray
,而不是共享。
的Buffer
对象的存储器被解释为不同的元件的阵列,而不是作为目标类型的一个字节数组。也就是说,使用元素new Uint32Array(Buffer.from([1, 2, 3, 4]))
创建一个4 Uint32Array
元素[1, 2, 3, 4]
,而不是Uint32Array
使用单个元素[0x1020304]
或创建一个4 元素[0x4030201]
。
他们继续提到TypedArray.from
,在节点中接受Buffer
,因此“正确”的方法是:
var arrByte = Uint8Array.from(data)
...但是,这根本没有必要,因为a Buffer
是a Uint8Array
并且new UintArray(someBuffer)
确实可以正常工作。
您的问题中也没有上下文,但是Blob
节点中不存在上下文,因此您也不需要它,因为Buffer
已经为您提供了对二进制数据的原始访问权限,而其他fs
方法则允许您读取和写入文件。