web-dev-qa-db-fra.com

Comment stocker un tableau d'octets en Javascript

Je vais stocker un grand nombre de valeurs d'octets (probablement plus d'un million) en Javascript. Si j'utilise un tableau normal avec des nombres normaux, cela prendra 8 Mo, car les nombres sont stockés sous forme de doublons IEEE, mais si je peux le stocker sous forme d'octets, ce ne sera que 1 Mo.

J'aimerais éviter de gaspiller autant d'espace pour des raisons évidentes. Est-il possible de stocker des octets sous forme d'octets au lieu de doubler? La compatibilité du navigateur n’est pas un problème pour moi, tant que cela fonctionne dans Chrome. Ceci est en HTML5, si cela fait une différence.

46
Kendall Frey

En utilisant tableaux typés , vous pouvez stocker des tableaux de ces types :

  • Int8
  • Uint8
  • Int16
  • Uint16
  • Int32
  • Uint32
  • Float32
  • Float64

Par exemple:

​var array = new Uint8Array(100);
array[42] = 10;
alert(array[42]);​

Voir en action ici .

52
Kendall Frey
var array = new Uint8Array(100);    
array[10] = 256;
array[10] === 0 // true

J'ai vérifié dans Firefox et Chrome, c'est vraiment un tableau d'octets:

var array = new Uint8Array(1024*1024*50);  // allocates 50MBytes
8
reuns

Vous pouvez stocker les données dans un tableau de chaînes de grande taille fixe. Il devrait être efficace d’accéder à un caractère particulier de ce tableau de chaînes et de le traiter comme un octet.

Il serait intéressant de voir les opérations que vous souhaitez soutenir, peut-être exprimées sous forme d'interface, pour rendre la question plus concrète.

2
Hew Wolff