读书人

C#中deflate解压不能准确进行

发布时间: 2013-03-21 10:08:17 作者: rapoo

C#中deflate解压不能正确进行!
以下函数为C#中的delate解压部分,输入为经base编码的deflate压缩数据,调试到base64解码后,写入文件流还是正确的,但解压流不正确,请高手指点。
public string DeflateDecompress(string strSource)
{
byte[] buffer = Convert.FromBase64String(strSource);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
using (System.IO.Compression.DeflateStream stream = new System.IO.Compression.DeflateStream(ms,System.IO.Compression.CompressionMode.Decompress))
{
stream.Flush();
int nSize = 16 * 1024 + 256; //假设字符串不会超过16K
byte[] decompressBuffer = new byte[nSize];
int nSizeIncept = stream.Read(decompressBuffer, 0, nSize);
stream.Close();
return System.Text.Encoding.UTF8.GetString(decompressBuffer, 0, nSizeIncept); //转换为普通的字符串
}
}
}
[解决办法]
System.Text.Encoding.UTF8.GetString(decompressBuffer, 0, nSizeIncept);
确定是使用的UTF8?可能是编码的问题。
[解决办法]

引用:
引用:msdn 上有详细的例子
http://msdn.microsoft.com/zh-cn/library/system.io.compression.deflatestream(v=vs.80).aspx

就是照上面的例子写的啊!


static void Main(string[] args)
{
string str = "Hello World!";
Console.WriteLine("压缩前:" + str);
str = DeflateCompress(str);
Console.WriteLine("压缩前:" + str);
str = DeflateDecompress(str);
Console.WriteLine("解压后:" + str);
Console.ReadLine();
}

public static string DeflateCompress(string strSource)
{
byte[] buffer = Encoding.UTF8.GetBytes(strSource);


using (MemoryStream ms = new MemoryStream())
{
using (DeflateStream compressedzipStream = new DeflateStream(ms, CompressionMode.Compress, true))
{
compressedzipStream.Write(buffer, 0, buffer.Length);

}
return Convert.ToBase64String(ms.GetBuffer());
}
}
public static string DeflateDecompress(string strSource)
{
byte[] buffer = Convert.FromBase64String(strSource);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
using (System.IO.Compression.DeflateStream stream = new System.IO.Compression.DeflateStream(ms, System.IO.Compression.CompressionMode.Decompress))
{
stream.Flush();
int nSize = 16 * 1024 + 256; //假设字符串不会超过16K
byte[] decompressBuffer = new byte[nSize];
int nSizeIncept = stream.Read(decompressBuffer, 0, nSize);
stream.Close();
return System.Text.Encoding.UTF8.GetString(decompressBuffer, 0, nSizeIncept); //转换为普通的字符串
}
}
}

读书人网 >C#

热点推荐