Comment faire pour ajouter des octets, multi-octets et un tampon à ArrayBuffer en javascript?
Javascript ArrayBuffer ou TypedArrays n'importe quel type de appendByte(), appendBytes(), ou appendBuffer() méthodes. Donc, si je veux remplir un ArrayBuffer une valeur à la fois, comment dois-je faire?
var firstVal = 0xAB; //1 byte
var secondVal = 0x3D7F //2 bytes
var anotherUint8Array = someArr;
var buffer = new ArrayBuffer(); //I don't know the length yet
var bufferArr = new UInt8Array(buffer);
//following methods do not exist. What are the alternatives for each??
bufferArr.appendByte(firstVal);
bufferArr.appendBytes(secondVal);
bufferArr.appendBuffer(anotherUint8Array);
c'est un tableau, utilisez la syntaxe de tableau
Vous ne pouvez pas modifier la taille de la mémoire tampon fois qu'il est créé
r[i]=x
ex: github.com/rndme/download/blob/master/download.js#L69 aussi revoir la syntaxe de la Uint8Array constructeur: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/... - vous avez besoin d'une taille sur ce tableau de la mémoire tampon pour être en mesure de l'utiliser comme ça....Vous ne pouvez pas modifier la taille de la mémoire tampon fois qu'il est créé
OriginalL'auteur codneto | 2015-11-13
Vous devez vous connecter pour publier un commentaire.
Vous pouvez créer un nouveau TypedArray avec un nouveau ArrayBuffer, mais vous ne pouvez pas modifier la taille d'un tampon existante
Pouvez faire
Si vous souhaitez utiliser différents types, passer par
Uint8Array
comme la plus petite unité est un octet, c'est à direCela signifie
.length
fonctionne comme prévu, vous pouvez maintenant convertir à votre tableau typé de choix (assurez-vous que c'est un type qui accepterait l'.byteLength
de la mémoire tampon)À partir d'ici, vous pouvez maintenant mettre en œuvre toute méthode, comme pour la concaténation de vos données, par exemple
concatBytes
fonction plusieurs fois, pour chaque octet, mais peut-il être accompli dans une meilleure façon?comment sont vos multi-octets stockés? par exemple, si vous utilisez ints, comment savez-vous la différence entre
0x3D7F
et0x00003D7F
? Et oui, je suis d'accord il doit y avoir un nativeconcat
, mais je ne pense pas qu'il devrait y avoir un nativepush
ou longueur évolution - qui n'est pas comment les tableaux typés travailS, j'ai des fonctions qui retournent valeur de 4 octets qui j'ai besoin d'ajouter de la mémoire tampon. Moi aussi je suis à la lecture de quelques octets à partir d'un flux de données et l'ajout de tampon, et parfois fondés sur un certain nombre de drapeaux que j'ai à lire 1, 2 ou 4 octets de la valeur, qui doivent tous être annexé à la mémoire tampon. Comment dois-je accomplir ajoutant ces multi-octets valeurs de tampon?
l'écrire comme une boucle. Meilleur endroit pour boucle serait la création d'un
n
long Uint8Array pour les nouvelles données et à l'aide de la boucle pour définir les vallées sur elle avant de la concaténation avec les données précédentes.Basé sur votre suggestion, j'ai changé
concatBytes
de la manière suivante. Je pense que cela fonctionnera. fonction concatBytes(ui8a, bytes) { var b = new Uint8Array(octets.la longueur); octets.forEach(function (byte, index) { b[index] = octet; }); return concatTypedArrays(ui8a, b); } var u8 = new Uint8Array(0); // pour ajouter 0x80C83B u8 = concatBytes(u8, [0x80, 0xC8, 0x3B]); // 128, 200, 59]OriginalL'auteur Paul S.
Paul de réponse vous permet de concaténer un TypedArray à un TypedArray. Dans l'ES6, vous pouvez utiliser la fonction suivante pour concaténer plusieurs TypedArrays:
Pour ajouter un nouvel octet est:
Cette méthode se trouve dans ExploringJS.
OriginalL'auteur newguy