0

我正在编写一个 xmpp 库,并且正在尝试编写一个流来支持 zlib 压缩数据。我有两个不同的版本,一个基于 zlib.net,另一个使用 SharpZipLib。zlib.net 版本无法识别压缩,SharpZipLib 版本进入无限循环。您可以在http://github.com/coder2000/ubiety/tree/master/的 xmpp.compression.zlib 和 xmpp.compression.sharpziplib 中找到相应的代码。任何解决此问题的帮助将不胜感激。

4

3 回答 3

1

这不是您问题的直接解决方案,但您尝试过 System.IO.Compression.GZipStream 或 DeflateStream 吗?

于 2008-12-01T00:07:13.423 回答
1

不,我正在尝试尽可能跨平台。我不知道 Mono 是否实现了这些类,也不知道微软为 zlib 压缩编写了类。

于 2008-12-01T00:19:01.793 回答
0

我没有深入研究,但奇怪的是您的 SharpZipLib 包装器忽略offsetcount在 BeginRead 中:

public override IAsyncResult BeginRead (byte[] buffer, int offset, int count, AsyncCallback cback, object state)
{
  _outBuff = buffer;
  if ( _in.IsNeedingInput )
    return _innerStream.BeginRead(_inBuff, 0, _inBuff.Length, cback, state);

  ZlibStreamAsyncResult ar = new ZlibStreamAsyncResult(state);
  cback(ar);
  return ar;
}

叫我疯了,但可能GZipOutputStream直接使用 etc (或 System.Compression 对应物)......节省了很多实现细节......

于 2008-12-01T05:18:53.763 回答