nodejs conversion from buffer data to byte array

时间:2018-07-25 05:22:32

标签: arrays node.js byte typed-arrays

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.

2 个答案:

答案 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实例,但要注意以下几点:

     
      
  1. Buffer对象的内存被复制到TypedArray,而不是共享的。

  2.   
  3. Buffer对象的内存被解释为不同元素的数组,而不是目标类型的字节数组。也就是说,new Uint32Array(Buffer.from([1, 2, 3, 4]))创建具有元素Uint32Array的4元素[1, 2, 3, 4],而不是具有单个元素Uint32Array[0x1020304]的{​​{1}}。 / p>

  4.   

他们继续提到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)
    }
 }