2017-09-24 12 views
-1

J'ai cette méthode de décompression, et je veux faire une compression basée sur elle. quelqu'un pourrait-il m'aider? (Je me suis essayé à écrire, mais n'a pas fonctionné)C# Gzip Ecrire Compresser Personnalisé

Décompresser Méthode:

public static byte[] Decompress(byte[] data) 
{ 
    MemoryStream memoryStream = new MemoryStream(); 
    memoryStream.Write(data, 0, data.Length); 
    memoryStream.Position = 0L; 
    GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress, true); 
    MemoryStream memoryStream2 = new MemoryStream(); 
    byte[] array = new byte[64]; 

    for (int i = gZipStream.Read(array, 0, array.Length); i > 0; i = gZipStream.Read(array, 0, array.Length)) 
    { 
     memoryStream2.Write(array, 0, i); 
    } 

    gZipStream.Close(); 
    return memoryStream2.ToArray(); 
} 

Voilà comment j'essayé d'écrire la méthode Compress, mais n'a pas obtenu le bon résultat quand je décompresse en arrière:

public static byte[] Compress(byte[] data) 
     { 
      MemoryStream memoryStream = new MemoryStream(); 
      memoryStream.Write(data, 0, data.Length); 
      memoryStream.Position = 0L; 
      GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Compress, false); 
      byte[] array = new byte[64]; 
      gZipStream.Write(array, 0, array.Length); 
      gZipStream.Close(); 
      return memoryStream.ToArray(); 
     } 
+1

avez-vous un problème de _specific_? S'il vous plaît lire [demander]. – Dmitry

+0

Je n'ai pas d'autres spécifications, je veux faire la méthode de compression basée sur le décompresser. – Castiel

+0

Ensuite, essayez de le faire. Si vous rencontrez un problème spécifique, demandez la solution. – Dmitry

Répondre

1

Essayez d'utiliser la mise en œuvre simple:

public static byte[] Compress(byte[] data) 
{ 
    using (MemoryStream memoryStream = new MemoryStream()) 
    using (GZipStream gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true)) 
    { 
     gzipStream.Write(data, 0, data.Length); 
     return memoryStream.ToArray(); 
    } 
} 
+0

oui, mais dans la méthode de décompression, il lit 64 octets toujours, au lieu de tous à la fois. – Castiel

+1

Y at-il une raison de lire par petits morceaux si la méthode retourne toutes les données décompressées sous la forme d'un tableau à un seul octet? – Dmitry

+0

oui il y a. car plus tard le résultat doit être chiffré sur la base d'un autre algorithme. – Castiel