• ZipHelper 修正


        在我前面的“压缩与解压缩 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     }
  • 相关阅读:
    Java代码输出是“father”还是“child”(二)
    Java代码输出是“father”还是“child”(一)
    “var arr = []; ”和 “var arr = {};” 的区别
    Servlet页面间对象传递的方法
    利用OWI优化SQL
    Oracle 12c 12.1.0.1.0管理控制文件官方文档说明
    计算工资
    检测本地网络连接状态断开以及恢复的方法
    linux 批量创建用户
    比较两表数据
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/346312.html
Copyright © 2020-2023  润新知