Sharpziplib InflaterInputStream.Read零字节时的行为

时间:2014-01-20 08:10:56

标签: c# inflate .net-remoting sharpziplib

我正在使用InflaterInputStream处理.Net Remoting压缩接收器。我从.Net Remoting书籍here获得了指南。

我使用二进制文件作为格式化程序,我遇到的问题是.Net binaryformatter调用InflaterInputStream.Read(...)方法时,它有时会传递一个零长度字节作为第一个参数。 InflaterInputStream无法处理零长度字节并抛出“不知道该做什么”的异常:

public override int Read(byte[] b, int off, int len)
        {
            for (;;) {
                int count;
                try {
                    count = inf.Inflate(b, off, len);
                } catch (Exception e) {
                    throw new SharpZipBaseException(e.ToString());
                }

                if (count > 0) {
                    return count;
                }

                if (inf.IsNeedingDictionary) {
                    throw new SharpZipBaseException("Need a dictionary");
                } else if (inf.IsFinished) {
                    return 0;
                } else if (inf.IsNeedingInput) {
                    Fill();
                } else {
                    throw new InvalidOperationException("Don't know what to do");
                }
            }
        }

我打算在方法之上添加一个“if”代码块,以便它首先检查byte是否为零。如果它为零则会返回0,如:

public override int Read(byte[] b, int off, int len)
        {
            //empty bytes should not go into Inflate method.
            if (b.Length == 0)
            {
                return 0;
            }

这是解决此问题的最佳解决方案吗?对此方法的调用来自.Net BinaryFormatter,所以我只是在这个类中处理它,但我不是特别确定返回零是否会对BinaryFormatter产生影响。

0 个答案:

没有答案