2017-09-24 80 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_問題?請閱讀[問]。 – Dmitry

+0

我沒有其他的說明,我想製作基於解壓縮的壓縮方法。 – Castiel

+0

然後試着去做。如果你遇到一些具體的問題 - 請求解決方案。 – 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

如果方法以單字節數組的形式返回所有解壓縮的數據,是否有理由通過短塊讀取? – Dmitry

+0

是的。因爲後來需要基於另一種算法對結果進行加密。 – Castiel