web-dev-qa-db-ja.com

バッファデータからバイト配列へのnodejs変換

バッファデータをバイト配列に変換したい。これが私が試したことです

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)
   }
 }

私はまだこの仕事をしていないので、私の投稿です。私は自分が何をしているかを知りたいのですが、それは正しくありません。

6
lilKing

Bufferドキュメントは非常に啓発的です

TypedArrayが導入される前は、JavaScript言語にはバイナリデータのストリームを読み取ったり操作したりするメカニズムがありませんでした。 BufferクラスはNode = js APIの一部として導入され、TCPストリーム、ファイルシステム操作、およびその他のコンテキストでオクテットストリームとの対話を可能にします。

TypedArrayが利用可能になったため、BufferクラスはUint8ArrayAPIをより適切な方法で実装しますNode.jsに最適化され、適しています。

バッファインスタンスもUint8Arrayインスタンスです。ただし、TypedArrayとはわずかに互換性がありません。たとえば、ArrayBuffer#slice()はスライスのコピーを作成しますが、Buffer#slice()の実装は既存のBufferをコピーせずにビューを作成し、Buffer#slice()をさらに大きくします。効率的。

次の警告を使用して、バッファから新しいTypedArrayインスタンスを作成することもできます。

  1. Bufferオブジェクトのメモリは、共有されず、TypedArrayにコピーされます。

  2. Bufferオブジェクトのメモリは、ターゲットタイプのバイト配列としてではなく、個別の要素の配列として解釈されます。つまり、new Uint32Array(Buffer.from([1, 2, 3, 4]))は、単一の要素Uint32Arrayまたは[1, 2, 3, 4]を持つUint32Arrayではなく、要素[0x1020304]を持つ4要素[0x4030201]を作成します。

さらに、ノードでBuffersを受け入れる TypedArray.from に言及するため、「正しい」方法は次のとおりです。

var arrByte = Uint8Array.from(data)

...ただし、BufferUint8Arrayであり、new UintArray(someBuffer)は正常に機能するため、これはまったく必要ありません。

質問にもコンテキストはありませんが、Blobはノードに存在しません。また、Bufferは既にバイナリデータやその他のfsメソッドを使用すると、ファイルを読み書きできます。

7
josh3736
  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)
    }
 }
2
lilKing