ICSharpCode.SharpZipLib对内存流数据进行解压操作

epngllh 2011-01-02 11:08:59
代码如下:
public string DeCompressText_memorystream(MemoryStream ms) //解压缩 
{
string teststring = string.Empty;
try
{
ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream mStream= new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(ms);
MemoryStream mMemory = new MemoryStream();
Int32 mSize = 4096;
byte[] mWriteData = new byte[mSize];

while (true)
{
mSize = mStream.Read(mWriteData, 0, mSize); //这里出错
if (mSize > 0)
{
mMemory.Write(mWriteData, 0, mSize);
}
else
{
break;
}
}
mStream.Close();

byte[] byteDest = mMemory.ToArray();
teststring = (new UnicodeEncoding()).GetString(byteDest, 0, byteDest.Length);

}
catch (Exception exxx)
{
ShowMessagestr("出错:" + exxx.ToString().Trim());
}

return teststring;
}


传入一个内存流,在红色部门出错。我试过读取mStream的长度,但只有0
各位看看是哪里出错了?
...全文
379 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
epngllh 2011-01-03
  • 打赏
  • 举报
回复
自己解决了。如下代码为正确的:
提供给需要的人。
public string Decompress(string param)//解压
{
string commonString = "";
byte[] buffer = Convert.FromBase64String(param);
MemoryStream ms = new MemoryStream(buffer);
Stream sm = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(ms);
//这里要指明要读入的格式,要不就有乱码
StreamReader reader = new StreamReader(sm, System.Text.Encoding.Default);
try
{
commonString = reader.ReadToEnd();
}
finally
{
sm.Close();
ms.Close();
}
return commonString;
}
足球中国 2011-01-03
  • 打赏
  • 举报
回复
这个属性不可用。
压缩之后的大小是不固定的。
xuld 2011-01-03
  • 打赏
  • 举报
回复
mWriteData 不允许读




--------------------------------------------------------------
C#常用代码集合库 - 功能完整|效率高速|文档丰富
包括 ZIP 操作,支持流读写

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧