根据 .Net 4.5 System.IO.Compression 中的 MSDN 是基于 zlib。
我现在正在尝试将当前基于互操作的读取从非 .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 上第一次调用解压/读取时收到以下异常:
块长度与其补码不匹配
基于互操作的调用使用var result=inflate(ref zStyream, ZLibFlush.NoFlush;
是否有人尝试过相同的方法或看到代码错误的原因,或者我的理解有误?我也尝试过截断前两个字节,但没有任何运气。
前几个字节是 20, 202, 177,13。