2017-09-24 15 views
-1

私はこの解凍方法を持っており、それに基づいて圧縮方法を作りたい。誰も私を助けることができる? (私は自分自身が書く試みたが、うまくいきませんでした)C#Gzipカスタム圧縮を書き込む

解凍方法:

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(); 
} 

これは私が圧縮メソッドを記述しようとした方法ですが、私はそれをバック解凍したときに正しい結果を得ることはありませんでした。

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

をあなたは_specific_問題を持っていますか? [ask]をお読みください。 – Dmitry

+0

私は他の仕様を持っていない、私は圧縮解除方法に基づいて圧縮方法を作りたい。 – Castiel

+0

それからやってみてください。 _specific_問題に直面している場合は、解決策を尋ねます。 – Dmitry

答えて

1

は、以下の簡単な実装を使用するようにしてください:

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

はい、解凍メソッドでは、一度にすべてではなく常に64バイトを読み込みます。 – Castiel

+1

メソッドがすべての圧縮解除されたデータを1バイト配列として返す場合、短いチャンクで読み込む理由はありますか? – Dmitry

+0

はいあります。後で他のアルゴリズムに基づいて結果を暗号化する必要があるからです。 – Castiel

関連する問題