问题遇到的现象和发生背景
在使用Remoting通道压缩的时候借鉴了
https://www.cnblogs.com/openkava/archive/2007/08/10/850203.html
代码,一开始使用没有问题,但是偶尔遇到下面的异常情况,错误显示是压缩写入的时候数组越界,但是这是NZlib内部问题吗?我需要怎么解决。实际测试环境根本无法复现,只有生产环境才会出现这样的现象。如果可以通过升级解决的话,得弄清这个原因是啥?
/// <summary>
/// 压缩数据流
/// </summary>
/// <param name="inStream"></param>
/// <returns></returns>
public static Stream getCompressedStreamCopy(Stream inStream)
{
MemoryStream outStream = new MemoryStream();
Deflater mDeflater = new Deflater(Deflater.BEST_COMPRESSION);
DeflaterOutputStream compressStream = new DeflaterOutputStream(outStream,mDeflater);
byte[] buf = new Byte[4096];
int cnt = inStream.Read(buf,0,4096);
while (cnt>0) {
compressStream.Write(buf,0,cnt);
cnt = inStream.Read(buf,0,4096);
}
compressStream.Finish();
outStream.Seek(0,SeekOrigin.Begin);
return outStream;
}
问题相关代码,请勿粘贴截图
System.IndexOutOfRangeException:索引超出了数组界限。
Server stack trace:
在 NZlib.Compression.DeflaterHuffman.TallyLit(lnt32 lit)
在 NZlib.Compression.DeflaterEngine.DeflateFast(Boolean flush,Boolean finish)
在 NZlib.Compression.DeflaterEngine.Deflate(Boolean flush, Boolean finish)
在 Nzlib.Compression.Deflater.Deflate(Byte[] output, Int32 offset, Int32 length)
在 NZlib.Streams.DeflaterOutputStream.deflat()
在 NZlib.Streams. DeflaterOutputStream. Write(Byte [] buf, Int32 off, Int32 len)
在
Remoting.CompressionSinkCompressionHelper.getCompre
ssedStreamCopy(Stream inStream)
在
Remoting.CompressionSink.CompressionClientSink.ProcessMessage(IMessage msg, TransportHeaders requestHeaders,
Stream requestStream, ITransportHeaders& responseHeaders,Stream& responseStream)
在
System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(|Message msg) Exception rethrown at [0]:
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage((Message reqMsg, IMessage retMsg)
在
System.Runtime.Remoting.Proxies.RealProxy.Privatelnvoke(MessageData&msgData, Int32 type)