Bon zlib mise en œuvre .NET?
Je suis en train de construire une application réseau qui doit être en mesure de passer de la normale du trafic réseau pour une zlib flux compressé, à mi-chemin. Mes idées sur le sujet impliquer commutateur booléen que lorsque sur la volonté de provoquer le code de réseau pour transmettre toutes les données à travers une classe que je peux nourrir IEnumerable<byte>
, puis tirez le flux décompressé, en passant, que sur le déjà existant protocole d'analyse de code.
Choses que j'ai regardé:
- ZLib.NET - Il semble un peu... Ecclectic, et pas tout à fait ce que je veux. Toujours à en faire un décent de commencer à construire. (Jon Skeet commentaires ici peine de m'inspirer.)
- SharpZipLib - Cela ne semble pas à l'appui de zlib à tous? Quelqu'un peut confirmer ou nier cela?
J'aimerais beaucoup préfèrent et qui sont tous gérés de la solution, mais nous allons avoir... existe-il d'autres mises en oeuvre de cette bibliothèque dans .NET, ça pourrait être mieux adapté à ce que je veux faire, ou devrais-je prendre ZLib.NET et construire qu'un début?
PS:
De Jon demandé pour plus de détails, si elle est ici.
Je suis en train de mettre en œuvre PCCM 2. Cela implique un signal envoyé dans le flux réseau, et tout ce qui est après ce signal est une zlib comprimé flux de données. Il y a des liens à exactement ce qu'ils veulent dire par la que dans le lien ci-dessus. De toute façon, pour être clair, je suis sur la réception de fin de cette (client, serveur), et j'ai un tas de données lues du flux réseau déjà, et la bascule sera au milieu de ce (dans tous les probabilité au moins), de sorte que toute solution doit être en mesure d'avoir des données supplémentaires de la fed, avant qu'il ne prend plus la NetworkStream (ou je alimentez manuellement dans le reste des données).
Je n'ai aucune idée à ce sujet. Personnellement, je n'ai pas trop fait attention à ce niveau de détail. J'avais suspect qui serait mise en œuvre de serveur spécifique, il n'y a aucune mention de cela dans toute la description de la documentation.
Avez-vous jamais obtenir une bonne bibliothèque pour PCCM 2?
Je ne crois pas que j'ai jamais eu ce travail. Je pourrais essayer de voir si je peux creuser mon code, si vous êtes intéressé. Je pense que je l'ai encore quelque part.
je peut juste voir si je peux utiliser les bibliothèques c dans mon .Un projet de réseau en quelque sorte. Je ne suis certainement pas que les grands, à C si.
OriginalL'auteur Matthew Scharley | 2009-02-04
Vous devez vous connecter pour publier un commentaire.
SharpZipLib prend en charge la librairie ZLib. Regardez cette entrée de la FAQ.
En outre, avez-vous vérifié si le Système.IO.La Compression de l'espace de noms soutient ce dont vous avez besoin?
Je ne voudrais pas utiliser un
IEnumerable<byte>
si les flux sont conçus pour être enchaînés.EDIT: Bon... ça sonne comme vous avez besoin d'un ruisseau qui prend en charge la mise en tampon, mais avec plus de contrôle que
BufferedStream
fournit. Vous auriez besoin de "revenir en arrière" le flux de, si vous avez vu la décompression de la bascule, et puis créer un GZipStream sur le dessus de cela. Votre tampon devra être au moins aussi grand que votre plus grand appel à Read (), de sorte que vous pouvez toujours avoir assez de mémoire tampon pour revenir en arrière.Ce n'est pas tout à fait clair pour moi ce que vous êtes en train de faire. Avez-vous des deux flux de sortie, et si vous souhaitez passer entre eux? En fait, je n'ai pas vraiment de "get" si vous êtes en train de lire ou d'écrire. Plus d'explications dans la question pourrait donner des idées 🙂
Comme demandé, plus d'infos!
Ok, j'ai enveloppé mon NetworkStream avec un BufferedStream et... Rien. BeginRead se contente d'être là à ne rien faire. On peut supposer qu'il est en attente pour un plein de tampons en vaut la première, mais j'ai comme l'aide d'un 4k mémoire tampon de lecture avant, et, évidemment, un écran de connexion ne va pas prendre beaucoup d'espace.
Je n'ai de loin avec le BufferedStream en faveur de simplement lire octet par octet de toute façon, depuis ma fonction de traitement est un octet par octet d'état de la machine, de toute façon.
OriginalL'auteur Jon Skeet
Inclus dans DotNetZip il y a un ZlibStream, pour la compression ou la décompression de zlib des flux de données. Vous ne demandez pas, mais il y a aussi un GZipStream et un DeflateStream. Ainsi qu'un ZlibCodec classe, si c'est votre truc. (juste se gonfle ou se dégonfle tampons, par opposition aux cours d'eau).
DotNetZip est entièrement géré par la bibliothèque avec un libéral de la licence. Vous n'avez pas besoin d'utiliser de l' .zip capacité à obtenir à la Zlib choses. Et zlib trucs emballés séparément (en plus petit) DLL juste pour ce but.
OriginalL'auteur Cheeso
Ne l'accepté de répondre dans ce post: Zlib-compatible compression de flux, vous aider à tous?
GZipStream ne fonctionne pas, il jette un InvalidDataException, se plaindre d'en-têtes et des numéros de magie.
Vous voulez probablement
DeflateStream
, pasGZipStream
. Ce dernier enroule l'ancien et ajoute ou vérifie des sommes de contrôle CRC (et peut-être que certains en-têtes).OriginalL'auteur JMD
Je peux vous recommander Gerry Shaw zlib wrapper pour .NET:
Nous avons été à l'aide de ce en production depuis plus de 2 ans maintenant, à la fois avec .NET et Mono. Aucune douleur à ce jour.
OriginalL'auteur Dirk Vollmar
Autant que je sache, la ZLib (gzip) de bibliothèque n'a pas l'appui de l'inscription les fichiers dans l'en-tête. En supposant que ce qui importe pour vous, mais il semble un gros déficit. C'est à ce moment que j'ai utilisé la forte zip à la bibliothèque tout à l'heure, donc, je suis prêt à supprimer 🙂
C'est en fait la .NET de la bibliothèque de compression (gzip sur le dessus de ma tête) qui n'affiche pas les noms de fichiers
Désolé de monoxyde je devrais ai lu la question plus clairement...bye bye post dans 10 minutes
OriginalL'auteur Chris S