2017-09-24 53 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