`

C# 对字符串的压缩和解压

    博客分类:
  • C#
阅读更多

网上有很多关于字符压缩的例子,但是使用时发现基本都无法正常工作

  能够压缩,但不能够还原,很是糟糕!还说经过测试可以正常使用,反正我是不能够正常使用的

 

  自己从codeproject上找到一个,可以正常工作,共享与大家

   库类

 

class ZipLib
    {
        public static string Zip(string value)
        {
            //Transform string into byte[]  
            byte[] byteArray = new byte[value.Length];
            int indexBA = 0;
            foreach (char item in value.ToCharArray())
            {
                byteArray[indexBA++] = (byte)item;
            }

            //Prepare for compress
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms,
                System.IO.Compression.CompressionMode.Compress);

            //Compress
            sw.Write(byteArray, 0, byteArray.Length);
            //Close, DO NOT FLUSH cause bytes will go missing...
            sw.Close();

            //Transform byte[] zip data to string
            byteArray = ms.ToArray();
            System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);
            foreach (byte item in byteArray)
            {
                sB.Append((char)item);
            }
            ms.Close();
            sw.Dispose();
            ms.Dispose();
            return sB.ToString();
        }

        public static string UnZip(string value)
        {
            //Transform string into byte[]
            byte[] byteArray = new byte[value.Length];
            int indexBA = 0;
            foreach (char item in value.ToCharArray())
            {
                byteArray[indexBA++] = (byte)item;
            }

            //Prepare for decompress
            System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray);
            System.IO.Compression.GZipStream sr = new System.IO.Compression.GZipStream(ms,
                System.IO.Compression.CompressionMode.Decompress);

            //Reset variable to collect uncompressed result
            byteArray = new byte[byteArray.Length];

            //Decompress
            int rByte = sr.Read(byteArray, 0, byteArray.Length);

            //Transform byte[] unzip data to string
            System.Text.StringBuilder sB = new System.Text.StringBuilder(rByte);
            //Read the number of bytes GZipStream red and do not a for each bytes in
            //resultByteArray;
            for (int i = 0; i < rByte; i++)
            {
                sB.Append((char)byteArray[i]);
            }
            sr.Close();
            ms.Close();
            sr.Dispose();
            ms.Dispose();
            return sB.ToString();
        }
    }

 

使用库压缩的例子

  

string str_org="aaaaaaaaaabbbbbbbbbbbbcccccccccdddddddd";
            string str_comp = ZipLib.Zip(str_org);
            Console.WriteLine("str_comp:" + str_comp);

            string str_uncomp = ZipLib.UnZip(str_comp);
            Console.WriteLine("str_uncomp:" + str_uncomp);


            Console.ReadLine();

 

 希望对大家有所帮助

分享到:
评论
2 楼 yiranwuqing 2012-11-19  
ZipLib
qoushui 写道
看了半天代码,看不懂


UnZip,把压缩后的长度拿去构造缓冲,然后取数据,按理论,解压后长度会超过压缩后的长度,意味着解压后的数据会超过这个缓冲区,导致有一部分解压后数据无法取到。

于是调试你的代码,天下大白啊,压缩后的长度比压缩前还长,我还有什么话可说。




str_org.Length
39
str_comp.Length
128

虽然压缩算法是MS的问题,但这示例!!!唉!


当时项目中感觉效果还是可以的,有空在回头看看
1 楼 qoushui 2012-10-13  
看了半天代码,看不懂


UnZip,把压缩后的长度拿去构造缓冲,然后取数据,按理论,解压后长度会超过压缩后的长度,意味着解压后的数据会超过这个缓冲区,导致有一部分解压后数据无法取到。

于是调试你的代码,天下大白啊,压缩后的长度比压缩前还长,我还有什么话可说。




str_org.Length
39
str_comp.Length
128

虽然压缩算法是MS的问题,但这示例!!!唉!

相关推荐

    字符串压缩与解压

    C# 3种方法实现字符串的压缩与解压操作.

    字符串的压缩和解压

    字符串的压缩和解压

    C#中压缩字符串

    使用以下代码进行压缩和解压 /// /// 利用ICSharpCode压缩 /// /// &lt;param name="param"&gt;&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; public static string IC_Compress(string param) { byte[] data = System....

    C#利用SharpZipLib进行压缩和解压

    C#利用SharpZipLib进行文件压缩和解压实例

    C#中ICSharpCode.SharpZipLib字符串压缩

    压缩dll文件ICSharpCode.SharpZipLib.dll+压缩和解压字符串代码

    C#自定义字符串压缩和解压缩的方法

    本文实例讲述了C#自定义字符串压缩和解压缩的方法。分享给大家供大家参考。具体如下: class ZipLib { public static string Zip(string value) { //Transform string into byte[] byte[] byteArray = new byte...

    C#、java 字符流跨平台数据解压缩

    字符串采用UTF-8编码获得byte数组,保证两端通用,如果应用对编码有要求,两端同时改为其他编码方式也可以 从Java和C#的代码看,两者代码上有细微差别,但是思路方面两者基本是一样的 另外一个备忘,Java里边,...

    c#版本 Lz77压缩算法

    c# Lz77 压缩算法,已经使用很久 没有bug

    C#字符串和正则表达式参考手册.pdf

    本书后三章介绍C#正则希望对大家有所帮助,压缩后8.08MB解压后9.85MB

    前端pako压缩与解压缩

    前端pako压缩与解压缩

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows常用控件的使用、...

    C# 网站开发类库 VanClean类库

    网站开始中许多常用的类都集中在该类库中。 共分为以下几大分类: ... PublicCode 字符串判断 字符加密 解密等操作。坠机获取验证码等 WebSettings WebRegist 网站注册码的获取与验证网站是否注册等

    C#编程经验技巧宝典

    72 &lt;br&gt;0102 将字符串首字母转换大写 72 &lt;br&gt;0103 如何进行字节数组和字符串的相互转换 72 &lt;br&gt;0104 如何把一个按空格分割的字符串存储在一个ArrayList数组中 73 &lt;br&gt;4.2 获取字符串信息 73 ...

    C#开发典型模块大全

    20.2.5 载取字符串中的指定字符 516 20.3 设计过程 517 20.3.1 获取加密字符串的信息 517 20.3.2 对生成后的数据进行加密 520 20.3.3 对EXE文件进行加密 522 20.3.4 解密文件的设置 524 第21章 视频...

    C#开发典型模块大全(光盘)第二部分

    20.2.5 载取字符串中的指定字符 20.3 设计过程 20.3.1 获取加密字符串的信息 20.3.2 对生成后的数据进行加密 20.3.3 对EXE文件进行加密 20.3.4 解密文件的设置 第21章 视频监控模块 21.1 设计思路 21.2 关键技术 ...

    zip库(解决文件名中文乱码问题).zip

    从其他网站上下载的库,修改了字符串编码转换的方法,解决中文乱码问题,使用示例可见https://blog.csdn.net/qq_28742901/article/details/116156457

Global site tag (gtag.js) - Google Analytics