闲谈.NETFrameworkCompression功能应用技巧

.NET Framework能为开发人员提供一个合适的WEB应用程序部署平台,帮助他们轻松的完成各种程序的开发创建。以前做项目的时候,需要提供文件压缩功能。当时是使用了一个开源的类库,名为ZipLib,使用起来还是很方便的。在.Net 2.0中,微软在System.IO中新增了System.IO.Compression命名空间,.NET Framework Compression功能提供了压缩功能的相关类GZipStream。 #t#

这个类的使用与一般的文件流使用差不多。我没有分析其内部实现,但猜测应该还是采用Decorator模式对Stream进行了装饰,从中应用了.NET Framework Compression功能的算法。它通过Write()方法,将buffer里面的内容写到另一个文件流中,例如源文件为sourceFile,压缩后的文件为targetFile,则方法为:

  1. byte[] buffer = null; 
  2. FileStream sourceStream = null; 
  3. FileStream targetStream = null; 
  4. GZipStream compressedStream = null; 
  5. sourceStream = new FileStream
    (sourceFile,FileMode.Open,FileAccess.
    Read,FileShare.Read); 
  6. buffer = new byte[sourceStream.Length]; 
  7. sourceStream.Read(buffer,0,buffer.Length); 
  8. targetStream = new FileStream
    (targetFile,FileMode.OpenOrCreate,
    FileAccess.Write); 
  9. //将CompressedStream指向targetStream; 
  10. compressedStream = new GZipStream
    (targetStream,CompressionMode.
    Compress,true);
  11. compressStream.Write(buffer,0,
    buffer.Length);

在使用GZipStream时,需要添加引用:

 
 
 
  1. using System.IO;
  2. using System.IO.Compression;

.NET Framework Compression功能的解压缩与前面的方法差不多,仍然使用GZipStream文件流:

 
 
 
  1. // Read in the compressed source stream 
  2. sourceStream = new FileStream 
    ( sourceFile, FileMode.Open ); 
  3. // Create a compression stream pointing 
    to the destiantion stream 
  4. decompressedStream = new GZipStream 
    ( sourceStream, CompressionMode.
    Decompress, true ); 
  5. // Read the footer to determine the 
    length of the destiantion file 
  6. quartetBuffer = new byte[4]; 
  7. int position = (int)sourceStream.Length - 4;
  8. sourceStream.Position = position; 
  9. sourceStream.Read ( quartetBuffer, 0, 4 );
  10. sourceStream.Position = 0; 
  11. int checkLength = BitConverter.ToInt32 
    ( quartetBuffer, 0 ); 
  12. byte[] buffer = new byte[checkLength + 100]; 
  13. int offset = 0; 
  14. int total = 0; 
  15. // Read the compressed data into the buffer 
  16. while ( true ) 
  17. int bytesRead = decompressedStream.Read 
    ( buffer, offset, 100 ); 
  18. if ( bytesRead == 0 ) break; 
  19. offset += bytesRead; total += bytesRead; 
  20. // Now write everything to the destination file
  21. destinationStream = new FileStream 
    ( destinationFile, FileMode.Create ); 
  22. destinationStream.Write ( buffer, 0, total ); 
  23. // and flush everyhting to clean out the buffer
  24. destinationStream.Flush ( );

怎么样,通过对.NET Framework Compression功能的介绍,大家应该基本掌握了其中的应用技巧了吧。

网站题目:闲谈.NETFrameworkCompression功能应用技巧
标题来源:http://www.shufengxianlan.com/qtweb/news43/465743.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联