.NET GZipStream compresse et décompresse
Quel est le problème avec ce code ci-dessous. Je reçois toujours des FAUX, sens après la compression, décompressé de données ne correspond pas à la valeur d'origine.
public static bool Test()
{
string sample = "This is a compression test of microsoft .net gzip compression method and decompression methods";
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] data = encoding.GetBytes(sample);
bool result = false;
//Compress
MemoryStream cmpStream;
cmpStream = new MemoryStream();
GZipStream hgs = new GZipStream(cmpStream, CompressionMode.Compress);
hgs.Write(data, 0, data.Length);
byte[] cmpData = cmpStream.ToArray();
MemoryStream decomStream;
decomStream = new MemoryStream(cmpData);
hgs = new GZipStream(decomStream, CompressionMode.Decompress);
hgs.Read(data, 0, data.Length);
string sampleOut = System.BitConverter.ToString(data);
result = String.Equals(sample, sampleOut) ;
return result;
}
Je suis vraiment heureux si vous pouvez point où je suis de faire une erreur.
source d'informationauteur MehdiAnis
Vous devez vous connecter pour publier un commentaire.
Essayez ce code:
Le problème de ce que vous n'étiez pas à l'aide de la ASCIIEncoder pour obtenir la chaîne de retour pour sampleData.
EDIT: Voici un nettoyés version du code à l'aide de la Fermeture/l'Élimination:
Fermer la
GZipStream
après laWrite
appel.Sans appel
Close
il est possible que certaines données sont mises en mémoire tampon et n'est pas écrit dans le flux sous-jacent encore.Il y avait trois questions à résoudre le problème.
1. Après l'ÉCRITURE GZipStream doit être refermée :: hgs.Close();
GZipStream lire nécessaires pour être utilisé avec une boucle WHILE et de l'écriture la plus petite mémoire tampon de données non compressées à un MemoryStream :: outStream.Écrire( ... );
La conversion de décompressé byte[] tableau nécessaires pour utiliser le codage conversion :: string sampleOut = encodage.GetString(données);
Voici le code final:-
J'ai vraiment eu de la difficulté à obtenir de compression/décompression de travail avec Microsoft .NET GZipStream objet. Enfin, je pense que je l'ai eu dans le droit chemin. merci beaucoup à tous que la solution est venue de vous tous.
Voici mon nettoyé version de la solution finale: