首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >程序压缩/解压缩

程序压缩/解压缩
EN

Stack Overflow用户
提问于 2011-09-15 23:10:39
回答 2查看 221关注 0票数 0

在以编程方式将压缩方法应用于数据时,我一直在讨论这个问题。我已经搜索了很多关于这个问题的网站,但是似乎没有一个网站对我有帮助。

关于我的最新发现,我有:简单对象到byte[] & byte[]到对象方法(我更喜欢这些) & 一个更复杂的类扩展

它们似乎都压缩得很好,但在解压缩过程中却抛出一个错误。

我的目标: ->压缩并将内存中的数据写入文件.->从文件读取和解压缩数据。

使用它的主程序有一个包含对象的字符串,所有对象都用一个< CARD >标记分隔;每个对象包含6个字符串,图像(转换为string)都用一个< DATA >标记分隔。

我写了一个简单的“测试”程序来做实验,最后申请.这是代码:

代码语言:javascript
复制
    private void btnCompress_Click(object sender, EventArgs e)
    {
        try
        {
            Encoding enc = new UTF32Encoding();
            richTextBox1.Text = enc.GetString(CompressionStyle2.Compress(richTextBox1.Text));
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

    private void btnDecompress_Click(object sender, EventArgs e)
    {
        try
        {
            Encoding enc = new UTF32Encoding();
            richTextBox1.Text = (string)CompressionStyle2.Decompress(enc.GetBytes(richTextBox1.Text));
        }
        catch (Exception ex) { MessageBox.Show(ex.ToString()); }
    }

(我不太关心虚拟程序的效率-尽管我也尽量不做草率的工作)

我可能做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-15 23:43:19

您正在尝试将二进制数据存储在文本框中。这可能会在第一个NUL处截断,并可能以其他方式损坏数据(例如,后置字符可能不会被保留)。

如果需要将压缩输出作为文本处理,可以使用Base64或类似的方法。

或者跳过文本框,尝试使用二进制文件。

票数 0
EN

Stack Overflow用户

发布于 2011-09-15 23:49:30

只有当您传递给它的数据实际上是一个编码字符串时,enc.GetString()才能工作。

但在您的示例中,您没有将编码的字符串传递给该方法。您正在传递一个包含压缩步骤输出的字节数组。压缩产生“一串字节”。而且不可能仅仅从这组字节生成一个字符串。

您所做的错误是假设一个字节数组是一个字节数组,您可以在任意字节数组上调用Encoding.GetString()。不是这样的。

正如before所说,在将字节数组显示在文本框中之前,您需要对字节数组进行某种形式的编码。如果要将字节数组转换为可显示字符串,则可以通过十六进制编码步骤或base64或其他方式对其进行编码。

然后,当你想要解压缩时,你必须做相反的事情(解码)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7438498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档