我正在使用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产生影响。