web-dev-qa-db-fra.com

JavaScript: décompresser / gonfler / décompresser / décompresser les chaînes

Je recherche l'implémentation JavaScript d'algorithmes de gonflage de chaînes. Je veux compresser côté serveur (Java) et décompresser côté client (JavaScript).

J'ai trouvé:

décompressez les chaînes en javascript
Celui-ci est marqué comme ayant reçu une réponse pour un problème différent. D'autres réponses sont également pour autre chose (décompresser des fichiers au format Zip).

implémentation de gonflement JavaScript (éventuellement FF 3.6 uniquement)
C'est le plus proche de ce dont j'ai besoin. Cependant, j'aimerais avoir quelques alternatives.

Suggestions?
Merci, Ondra

Mise à jour: J'ai un cas d'utilisation assez spécifique, veuillez ne pas répondre "Ne faites pas ça en JavaScript." J'écris un outil de création de rapports "hors ligne" (une fois généré, il est placé dans un magasin statique) et le dégonflage peut économiser des mégaoctets pour un seul rapport. Je suis contraint par d'autres applications, je ne peux donc pas le stocker en tant que fichier Zip.

30
Ondra Žižka

Jetez un oeil à cette question de débordement de pile , les réponses contiennent des références à plusieurs moteurs de compression implémentés en javascript. La plupart d'entre eux sont basés sur LZ77.

10
Sean Kinsey

Je ne sais pas comment vous aimeriez cela, mais j'aime ces implémentations:

Le premier est le plus rapide que le second, nous pouvons généralement assurer un serveur rapide, mais nous ne connaissons pas les performances de la machine cliente. Par conséquent, je vous recommande de choisir js-deflate et d'ajuster votre Java (côté serveur) pour gonfler.

https://github.com/dankogai/js-deflate

http://code.google.com/p/gzipjs/

10

J'ai créé un exemple de travail en utilisant pako, moderne et rapide Zlib port. http://jsfiddle.net/9yH7M/2/

5
Redsandro

il y a cette bibliothèque graphique qui a en partie, une implémentation zlib en javascript. si vous faites défiler un peu cette page, vous la verrez comme un téléchargement séparé. http://jsxgraph.uni-bayreuth.de/wp/download/

3
Breton

Cet exemple: http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip montre comment vous pouvez faire des fichiers Zip en Javascript. Maintenant, je sais que vous voulez la compression ZLIB ou DEFLATE, plutôt que Zip. Mais, Zip utilise DEFLATE, et dans le fichier .js pour cet exemple, il y a une classe InflatingReader qui peut GONFLER pendant sa lecture.

La classe expose ces méthodes:

readByte()
   returns null when EOF is reached, or the value of the byte when successful.

readToEnd()
   returns an array of all bytes read, to EOF

beginReadToEnd(callback)
   async version of the above

readBytes(n)
   returns an array of n bytes read from the source.

beginReadBytes(n, callback)
   async version of the above

Vous pouvez utiliser ce code inchangé si vous voulez GONFLER .

Si vous voulez ZLIB (aka dézipper), alors il y a une signature de 2 octets que vous devez lire et valider avant de lire les octets compressés et de faire le GONFLAGE . Modifiez simplement InflatingReader pour lire et vider 2 octets, et cela fera très bien ZLIB.

2
Cheeso

J'ai trouvé une implémentation de gonflage qui fonctionne ici:

http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt

Si vous voulez une version légèrement plus propre qui nomme l'algorithme, celle-ci devrait fonctionner:

https://github.com/augustl/js-inflate

Gardez à l'esprit que les données "gonfler" compressées sont préfixées avec un en-tête de deux octets et suffixées avec une somme de contrôle de quatre octets, que vous devrez supprimer avant de passer à l'algorithme.

2
Alexander Staubo