ZipHelper 修正

简介: 在我前面的“压缩与解压缩 ZipHelper ”一文中提到了使用ICSharpCode.SharpZipLib.dll库的BZip2OutputStream和BZip2InputStream 来进行数据流的压缩。

    在我前面的“压缩与解压缩 ZipHelper ”一文中提到了使用ICSharpCode.SharpZipLib.dll库的BZip2OutputStream和BZip2InputStream 来进行数据流的压缩。这几天在我的AgileIM的测试中发现使用BZip2OutputStream和BZip2InputStream 来进行压缩/解压缩并不可靠,有时会出现这样的情况:对A进行压缩得到B,然后对B解压缩,得到C的却与A不等,通常的情况是,C只是A的首部的一部分。我没有研究ICSharpCode.SharpZipLib的源码,所以还没发现是什么原因造成了这种情况。
    
    幸运的是,我发现了一个更好的替代品--仍然是ICSharpCode.SharpZipLib类库中的一个类--BZip2,这个类的使用更方便,而且经过我的不完全测试,其运行的结果是可靠的。所以将ZipHelper的实现修正如下:

 1     public   class  ZipHelper
 2      {
 3           public   static   byte [] Zip( byte [] data)
 4          {
 5               return  Zip(data , 0  ,data.Length) ;
 6          }
 7 
 8           public   static   byte [] Unzip( byte [] data)
 9          {
10               return  Unzip(data , 0  ,data.Length) ;
11          }
12 
13           public   static   byte [] Zip( byte [] data , int  offset , int  size)
14          {
15              MemoryStream inStream  =   new  MemoryStream(data ,offset ,size);
16              MemoryStream outStream  =   new  MemoryStream() ;
17              BZip2.Compress(inStream ,outStream ,size) ;
18 
19               byte [] result  =  outStream.ToArray() ;
20              inStream.Close() ;
21              outStream.Close() ;
22 
23               return  result ;
24          }
25 
26           public   static   byte [] Unzip( byte [] data , int  offset , int  size)
27          {
28              MemoryStream inStream  =   new  MemoryStream(data ,offset ,size);
29              MemoryStream outStream  =   new  MemoryStream() ;
30              BZip2.Decompress(inStream ,outStream ) ;
31 
32               byte [] result  =  outStream.ToArray() ;
33              inStream.Close() ;
34              outStream.Close() ;
35 
36               return  result ;
37          }
38      }
目录
相关文章
|
开发者
SyntaxError: cannot assign to literal错误
SyntaxError: cannot assign to literal错误
2907 1
|
11月前
|
机器学习/深度学习
深入理解SVM中的核函数及其应用
深入理解SVM中的核函数及其应用
457 91
|
7月前
|
机器学习/深度学习 数据采集 人工智能
DeepSeek R1 最新全面综述:R1 为什么能让 LLM 像人一样思考?
DeepSeek R1 最新全面综述:R1 为什么能让 LLM 像人一样思考?
258 0
|
NoSQL Java 中间件
如何使用Redisson实现分布式锁?
如何使用Redisson实现分布式锁?
481 1
|
人工智能 自然语言处理
🚀从菜鸟到大师,一文读懂生成式大模型“提示词工程”的进阶秘籍✨
【8月更文挑战第1天】在人工智能领域,生成式大模型如GPT和DALL-E正引领着创意的新纪元。本文通过案例逐步解析“提示词工程”的精髓:从基础的直接提示,进化到富含细节与情感的进阶版本,再到结合模板与随机性的大师级应用。例如,创作环保主题文章时,从简单指示到强调个人行动与自然之美;生成印象派风格的日出海景图时,详述光线、色彩等元素。随着技巧提升,还可利用基础模板加随机提示的方式确保创意与质量并重。掌握这些秘籍,你也能驾驭AI,释放无限可能。
367 7
|
Web App开发 前端开发 JavaScript
解决 input 输入框在 iOS 系统中无法输入内容
解决 input 输入框在 iOS 系统中无法输入内容
1257 0
阿里云账号怎么实名认证?个人认证和企业实名认证教程
阿里云账号实名认证教程包括个人实名认证和公司实名认证
4388 0
阿里云账号怎么实名认证?个人认证和企业实名认证教程
【安装教程】【PowerDesigner 16.5】(附带安装包下载)
【安装教程】【PowerDesigner 16.5】(附带安装包下载)
5677 0
【安装教程】【PowerDesigner 16.5】(附带安装包下载)
|
JSON 监控 安全
Java下一代高并发技术——虚拟线程“JEP 425: Virtual Threads (Preview)”
很多语言都有类似于“虚拟线程”的技术,比如Go、C#、Erlang、Lua等,他们称之为“协程”。 不管是虚拟线程还是协程,他们都是轻量级线程,其目的都是为了提高并发能力。 本节详细介绍Java平台的“虚拟线程”的技术——“JEP 425: Virtual Threads (Preview)”。
1183 0
Java下一代高并发技术——虚拟线程“JEP 425: Virtual Threads (Preview)”
|
存储 安全 Android开发
无影云电脑的体验及其他平台的比较
本篇将介绍无影云电脑作为个人电脑的体验,说明其优缺点,并与其他平台的云电脑比较(主要是云游戏平台)。