用ZlibStream继续读取部分输入?

时间:2014-03-17 19:01:05

标签: c# zlib dotnetzip

在从套接字接收部分数据时,我很难理解ZlibStream的某些行为。另一端是发送zlib数据的C ++服务器,我正在编写客户端。

以下是我不理解的一些行为:

using (var mm = new MemoryStream())
{
  var z = new ZlibStream(mm, Ionic.Zlib.CompressionMode.Decompress);
  var buf = new byte[64];
  int read = z.Read(buf, 0, buf.Length);        // 0 of course
  mm.Write(test, 0, test.Length);               // mm contains bytes
  mm.Position = 0;
  read = z.Read(buf, 0, buf.Length);            // still 0?!

  z = new ZlibStream(mm, Ionic.Zlib.CompressionMode.Decompress);
  mm.Position = 0;
  read = z.Read(buf, 0, buf.Length);            // now read == 13
}

似乎一旦我从ZlibStream做了一个不完整的阅读,它只是放弃了,不能再使用了。如果我收到足够的数据来进行读取,并且希望流可以帮助我,让我知道它已经完成非零读取并且我可以保持偏移量,这让我感到沮丧。流。

此外我发现,如果我重新创建ZlibStream(听起来很愚蠢,可能很贵)我的实现类型的工作,除了我永远不能调整MemoryStream中的内容,它的长度会越来越长。成功读取后截断(SetLength(0))仅用于销毁压缩字典(我理解协议是有状态的),我不能再解码任何其他消息。

那么我做错了什么?

0 个答案:

没有答案