I want to convert buffer data to byte array. Here's what I've tried
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)
}
}
I'm yet to have this work hence my post. I'd very much like to know what I'm doing that's not right.
答案 0 :(得分:3)
Buffer
docs are very enlightening:
在引入
TypedArray
之前,JavaScript语言没有用于读取或处理二进制数据流的机制。Buffer
类是作为Node.js API的一部分引入的,用于与TCP流,文件系统操作和其他上下文中的八位位组流进行交互。在
>TypedArray
可用的情况下,Buffer
类以更优化且更适合Node.js的方式实现了Uint8Array
API。...
缓冲区实例也是
Uint8Array
实例。但是,与TypedArray
存在细微的不兼容。例如,在ArrayBuffer#slice()
创建切片的副本的同时,Buffer#slice()
的实现在现有Buffer
上创建视图而不进行复制,从而使Buffer#slice()
效率更高。>还可以从Buffer中创建新的TypedArray实例,但要注意以下几点:
Buffer
对象的内存被复制到TypedArray
,而不是共享的。
Buffer
对象的内存被解释为不同元素的数组,而不是目标类型的字节数组。也就是说,new Uint32Array(Buffer.from([1, 2, 3, 4]))
创建具有元素Uint32Array
的4元素[1, 2, 3, 4]
,而不是具有单个元素Uint32Array
或[0x1020304]
的{{1}}。 / p>
他们继续提到TypedArray.from
,它在节点中接受[0x4030201]
,所以“正确”的方式是:
Buffer
...但是,这根本没有必要,因为var arrByte = Uint8Array.from(data)
是Buffer
并且Uint8Array
确实可以正常工作。
您的问题中也没有上下文,但是节点中不存在new UintArray(someBuffer)
,并且您也不需要它,因为Blob
已经为您提供了对二进制数据的原始访问权限,而另一个Buffer
方法可让您读取和写入文件。
答案 1 :(得分:2)
import * as fs from 'fs';
[...]
event:(data) => {
fs.readFile(data, function(err, data) {
var arrByte= new Uint8Array.from(Buffer.from(data))
var binaryData= new Blob([arrByte])
if (err) throw err;
console.log(binaryData)
}
}