2015-04-16 10 views
18

Ich habe Uint8Array-Instanz, die Binärdaten einer Datei enthält.
Ich möchte Daten an den Server senden, wo es als Byte [] deserialisiert wird.
Aber wenn ich Uint8Array senden, habe ich Deserialisierungsfehler.Konvertieren Uint8Array in Array in Javascript

Also, ich möchte es in Array konvertieren, wie Array ist deserialized gut.
Ich mache es wie folgt:

function uint8ArrayToArray(uint8Array) { 
     var array = []; 

     for (var i = 0; i < uint8Array.byteLength; i++) { 
      array[i] = uint8Array[i]; 
     } 

     return array; 
    } 

Diese Funktion funktioniert gut, aber es ist nicht sehr effizient für große Dateien.

Frage: Gibt es effizientere Möglichkeit, Uint8Array -> Array zu konvertieren?

Antwort

32

Sie können var array = Array.from(uint8Array) in Umgebungen verwenden, die Array.from bereits (ES6), wenn sein nicht unterstützt unterstützen können Sie var array = [].slice.call(uint8Array)

+0

Ja, [] .slice funktioniert gut, und es ist kompakter. Aber es scheint nicht effizienter zu sein. Dauert ~ 5 Sekunden für 10mb Datei. ( –

+0

.entries() (und/oder .values ​​()) liefert das ArrayIterator-Objekt, nicht das Array. –

+3

Nitpicking hier, aber Sie sind nur ein kleines bisschen besser dran Array.prototype.slice.call anstelle von [] .slice aufrufen es speichert eine unnötige Array-Konstruktion. – jordancpaul

Verwandte Themen