文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

.NET Framework Compression功能应用技巧是什么

2023-06-17 17:46

关注

.NET Framework Compression功能应用技巧是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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

这个类的使用与一般的文件流使用差不多。我没有分析其内部实现,但猜测应该还是采用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时,需要添加引用:

using System.IO; 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. {   

  18. int bytesRead = decompressedStream.Read 
    ( buffer, offset, 100 );   

  19. if ( bytesRead == 0 ) break;   

  20. offset += bytesRead; total += bytesRead;   

  21. }   

  22. // Now write everything to the destination file  

  23. destinationStream = new FileStream 
    ( destinationFile, FileMode.Create );   

  24. destinationStream.Write ( buffer, 0, total );   

  25. // and flush everyhting to clean out the buffer  

  26. destinationStream.Flush ( ); 

关于.NET Framework Compression功能应用技巧是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯