web-dev-qa-db-fra.com

conversion nodejs des données tampon en tableau d'octets

Je veux convertir les données du tampon en tableau d'octets. Voici ce que j'ai essayé

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

Je n'ai pas encore ce travail d'où mon poste. J'aimerais beaucoup savoir ce que je fais qui ne va pas.

6
lilKing

Les documents Buffer sont très instructifs :

Avant l'introduction de TypedArray, le langage JavaScript ne disposait d'aucun mécanisme pour lire ou manipuler les flux de données binaires. La classe Buffer a été introduite dans le cadre de l'API Node.js pour permettre l'interaction avec les flux d'octets dans TCP flux, opérations de système de fichiers et autres contextes).

Avec TypedArray maintenant disponible, la classe Buffer implémente l'API Uint8Array d'une manière qui est plus optimisé et adapté à Node.js.

Les instances de tampon sont également des instances de Uint8Array. Cependant, il existe de subtiles incompatibilités avec TypedArray. Par exemple, tandis que ArrayBuffer#slice() crée une copie de la tranche, l'implémentation de Buffer#slice() crée une vue sur le Buffer existant sans copier, ce qui rend Buffer#slice() beaucoup plus efficace.

Il est également possible de créer de nouvelles instances de TypedArray à partir d'un tampon avec les mises en garde suivantes:

  1. La mémoire de l'objet Buffer est copiée dans le TypedArray, non partagée.

  2. La mémoire de l'objet Buffer est interprétée comme un tableau d'éléments distincts et non comme un tableau d'octets du type cible. C'est-à-dire que new Uint32Array(Buffer.from([1, 2, 3, 4])) crée un élément à 4 éléments Uint32Array Avec des éléments [1, 2, 3, 4], Pas un Uint32Array Avec un seul élément [0x1020304] Ou [0x4030201].

Ils continuent à mentionner TypedArray.from , qui dans le nœud accepte Buffers, donc la manière "correcte" est:

var arrByte = Uint8Array.from(data)

... cependant, cela ne devrait pas du tout être nécessaire car un Buffer est un Uint8Array et new UintArray(someBuffer) fonctionne très bien.

Il n'y a pas non plus de contexte dans votre question, mais Blob n'existe pas dans le nœud, et vous ne devriez pas en avoir besoin de toute façon, puisque Buffer vous donne déjà un accès brut aux données binaires et d'autres méthodes fs vous permettent de lire et d'écrire des fichiers.

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