我使用库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;
}