ICSharpCode.SharpZipLib CRC错误。怎么修?

时间:2015-01-12 15:34:04

标签: c# sharpziplib

我使用库ICSharpCode.SharpZipLib来压缩文本。 压缩完成后,我转换为base64 string并存储在数据库中。当我需要知道存储了什么时,我从数据库中获取值并解压缩。

但是,只有在一台客户端计算机上,当我压缩文本并尝试解压缩时出现以下错误:

BZip2 input stream crc error

我不知道错误的原因,因为在我的计算机中,所有压缩和解压缩工作正常。 我需要你的帮助才能知道错误的原因以及解决方法。对不起我的英文不好。

这是我的压缩和解压缩代码:

        public static byte[] Compress(byte[] bytesToCompress)
        {
            MemoryStream ms = new MemoryStream();
            Stream s = new BZip2OutputStream(ms);
            s.Write(bytesToCompress, 0, bytesToCompress.Length);
            s.Close();
            return ms.ToArray();
        }

        public static string Compress(string stringToCompress, Encoding encoding)
        {
            if (String.IsNullOrEmpty(stringToCompress))
                return String.Empty;

            byte[] compressedData = Compress(encoding.GetBytes(stringToCompress));
            string strOut = Convert.ToBase64String(compressedData);

            return strOut;
        }

    public static string DeCompress(string stringToDecompress)
    {
        Encoding encoding = Encoding.Unicode;
        string outString;

        try
        {
            byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());
            outString = encoding.GetString(DeCompress(inArr));
        }
        catch (NullReferenceException nEx)
        {
            return nEx.Message;
        }

        return outString;
    }

    public static byte[] DeCompress(byte[] bytesToDecompress)
    {
        byte[] writeData = new byte[4096];
        Stream s2 = new BZip2InputStream(new MemoryStream(bytesToDecompress));
        MemoryStream outStream = new MemoryStream();
        while (true)
        {
            int size = s2.Read(writeData, 0, writeData.Length);
            if (size > 0)
            {
                outStream.Write(writeData, 0, size);
            }
            else
            {
                break;
            }
        }
        s2.Close();
        byte[] outArr = outStream.ToArray();
        outStream.Close();
        return outArr;
    }

0 个答案:

没有答案