`

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#语言中三种实现字符串压缩与解压的方法。 1. **GZipStream** GZipStream是.NET Framework提供的用于压缩和解压缩数据的类,它是基于Gzip文件格式的。要使用GZipStream,我们需要创建一个...

    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#自定义字符串压缩和解压缩的方法

    本文将介绍如何自定义一个简单的字符串压缩和解压缩的方法,使用.NET框架内置的`System.IO.Compression.GZipStream`类。 首先,让我们分析`ZipLib`类中的`Zip`方法。这个方法接收一个字符串`value`作为输入,其目的...

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

    C#利用SharpZipLib进行压缩和解压 C#中的压缩和解压是非常常见的操作, SharpZipLib是一个流行的压缩库,它提供了压缩和解压的功能。在本文中,我们将使用SharpZipLib库来实现文件的压缩和解压。 SharpZipLib简介...

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

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

    c#版本 Lz77压缩算法

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

    C# 压缩文件与字符串.rar_.net

    **字符串压缩与解压缩:** 除了处理文件,我们还可以使用.NET框架对字符串进行压缩和解压缩。这通常涉及使用GZipStream或DeflateStream,它们提供了数据的压缩和解压缩功能。以下是一个用GZipStream压缩和解压缩字符...

    前端pako压缩与解压缩

    2. **压缩数据**:调用`pako.gzip()`或`pako.deflate()`方法,传入需要压缩的字符串或Buffer对象。例如: ```javascript const data = 'Hello, World!'; const compressedData = pako.gzip(data); ``` 3. **解...

    C#7z压缩格式代码

    不仅可以创建7z文件,还可以读取、解压和检查7z档案。同时,通过度量压缩时间和计算压缩率,我们可以评估算法的性能和效率。希望这个简短的指南对你在C#中操作7z格式有所帮助,也鼓励你在实际项目中进一步探索和优化...

    C# 压缩和解压web空间中的所有文件

    标题 "C# 压缩和解压web空间中的所有文件" 涉及到的是在C#编程环境中,如何利用代码对Web空间中的文件进行压缩和解压操作。这通常是为了节省存储空间,便于传输或者备份数据。下面将详细阐述相关知识点。 一、C# ...

    字符串的哈夫曼编码

    - **字符串压缩**:是数据压缩的一个应用场景,目标是减少存储空间或传输数据的需求。 - **哈夫曼编码**:是数据压缩中的一种算法,通过优化字符编码来提高压缩效率。 8. **实际应用**: - 哈夫曼编码常用于文本...

    pako gzip 压缩和解压缩(支持中文)

    1. **压缩**:使用`pako.gzip()`方法,将未压缩的数据作为输入,它会返回一个已压缩的二进制字符串或Buffer(在Node.js环境下)。例如: ```javascript var input = "这是需要压缩的文本"; var compressed = pako...

    省市区json字符串

    标题中的“省市区json字符串”指的是一个数据文件,其中包含了中国所有省份、城市和区县的结构化数据,这些数据通常以JSON(JavaScript Object Notation)格式存储。JSON是一种轻量级的数据交换格式,因其易读性、...

    C#解压文件含空格

    在C#中,处理包含空格的文件名需要特别注意字符串的正确引用。当文件名中包含空格时,如果不进行适当的转义或使用引号包围,可能会导致解析错误。使用`System.IO`命名空间中的类,如`FileInfo`或`DirectoryInfo`,...

    源代码 C#实现的zip压缩算法

    DEFLATE结合了LZ77字典压缩和霍夫曼编码,通过查找重复字符串并用短编码代替它们来达到压缩目的。C#中的实现通常会使用.NET框架提供的System.IO.Compression命名空间,该命名空间包含了ZipArchive类,可用于创建、...

    Unishox:保证对Unicode短字符串进行压缩

    该算法尤其关注那些在JSON、XML等数据格式中常见的短字符串的压缩,因为这些格式在现代通信和数据库存储中广泛应用。 Unishox的出现是为了解决Unicode字符串在内存和传输中的效率问题。Unicode是一种广泛采用的标准...

    C#中使用JSON解析.rar

    在C#编程环境中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它允许我们将数据结构和对象序列化为文本字符串,便于在网络上传输和存储。JSON易于阅读和编写,同时也易于机器解析和生成...

    C#实现的简单文件备份工具

    在C#中,可以使用`DateTime.Now`获取当前时间,然后通过`ToString()`方法转换为特定格式的字符串,例如"yyyyMMddHHmmss"。 3. 保存软件设置: 应用程序可以使用XML、JSON或注册表等方式保存用户的配置信息,如源...

    移植《金融时报》 JavaScript字符串压缩器

    这意味着开发者可能需要理解两种语言的语法差异,以及如何在不同的开发环境中有效地实现字符串压缩和解压功能。 在压缩包子文件的文件名称 "Porting-the-Financial-Times-JavaScript-String-Comp.pdf" 中,我们可以...

Global site tag (gtag.js) - Google Analytics