根据MSDN的资料,.Net 4.5中的System.IO.Compression是基于zlib实现的。
我现在正在尝试将我的当前基于interop的读取代码,从一个非.NET服务器上的zlib压缩流,改变为基于BCL的实现方法。
我的实现代码如下:
我在DeflateStream的解压缩/读取的第一次调用时收到以下异常:
块长度与其补数不匹配
基于Interop的调用使用
我也尝试了截断前两个字节,但没有成功。
前几个字节是20、202、177、13。
我现在正在尝试将我的当前基于interop的读取代码,从一个非.NET服务器上的zlib压缩流,改变为基于BCL的实现方法。
我的实现代码如下:
var enc = new UTF8Encoding();
var readBytes = BufferSizeRaw;
var outputBuffer = new byte[BufferSizeRaw];
var networkBuffer = _networkQueue.Take();
var ms = new MemoryStream(networkBuffer.InputBuffer, 0, networkBuffer.UsedLength);
using (Stream stream = new DeflateStream(ms, CompressionMode.Decompress))
while (readBytes==BufferSizeRaw)
{
readBytes = stream.Read(outputBuffer, 0, outputBuffer.Length);
stringBuffer+= enc.GetString(outputBuffer, 0, readBytes);
}
我在DeflateStream的解压缩/读取的第一次调用时收到以下异常:
块长度与其补数不匹配
基于Interop的调用使用
var result=inflate(ref zStyream, ZLibFlush.NoFlush;
有人尝试过相同的操作或者看到代码中的错误,还是我理解有误?我也尝试了截断前两个字节,但没有成功。
前几个字节是20、202、177、13。