2014-09-30 64 views

回答

0

这是我结束了在这种情况下诉诸。

string jobDirVar = [FilePath]; 
    byte[] bytesToCompress = File.ReadAllBytes(jobDirVar); 
    byte[] decompressedBytes = new byte[bytesToCompress.Length]; 
    using (FileStream fileToCompress = File.Create(FilePath)) 
     { 
      using (GZipStream compressionStream = new GZipStream(fileToCompress, CompressionMode.Compress)) 
      { 
       compressionStream.Write(bytesToCompress, 0, bytesToCompress.Length); 
      } 
     } 

     using (FileStream fileToDecompress = File.Open(FilePath, FileMode.Open)) 
     { 
      using (GZipStream decompressionStream = new GZipStream(fileToDecompress, CompressionMode.Decompress)) 
      { 
       decompressionStream.Read(decompressedBytes, 0, bytesToCompress.Length); 
      } 
     } 

这不是最漂亮的编码,但它似乎提供了我以后的东西。如果其他任何人有什么可以简化的东西,我仍然很想听到它!

1

.NET Framework在基本库中提供System.IO.Compression.DeflateStream类;它实现了DEFLATE压缩算法。 zlib流只是zlib魔术字节,随后是使用DEFLATE算法压缩的内容。

oops,我给出了“zlib”流的指令,它比gzip更原始。除了deflate压缩的内容之外,gzip还有一个目录和其他内容。

对于gzip,请使用框架的System.IO.Compression.GZipStream类,正如Mike_G的答案所示。

+0

有什么机会可以扩展一下吗?这似乎与我正在寻找的线条一致,但对于像我一样绿色的人来说,这有点神秘。抱歉。 : -/ – Eiketsu 2014-09-30 13:40:03

1

这是我用gzip的-ING的对象:

byte[] initialBytes = //object serialized to bytes 
byte[] compressedBytes; 

     using (MemoryStream stream = new MemoryStream(initialBytes)) 
     { 
      using (MemoryStream output = new MemoryStream()) 
      { 
       using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress)) 
       { 
        Pump(stream, zipper); 
       } 

       compressedBytes = output.ToArray(); 
      } 
     } 

return compressedBytes; 


//pump method 

internal static void Pump(Stream input, Stream output) 
    { 
     byte[] bytes = new byte[4096]; 
     int n; 
     while ((n = input.Read(bytes, 0, bytes.Length)) != 0) 
     { 
      output.Write(bytes, 0, n); 
     } 
    } 

,如果我需要做一个文件:

byte[] result; 

     using(FileStream file = //some filestream I created) 
     { 
      file.Position = 0; 

      using (MemoryStream output = new MemoryStream()) 
      { 
       using (GZipStream zipper = new GZipStream(output, CompressionMode.Compress)) 
       { 
        Pump(file, zipper); 

       } 

       result = output.ToArray(); 
      } 
     } 



     return result; 
+0

我会试一试,看看我可以用它来管理。谢谢。 :) – Eiketsu 2014-09-30 13:40:20

+0

我也为文件流添加一个方法 – 2014-09-30 13:41:54

相关问题