如何DeFlateStream.重定向到System.Net.ConnectStream.Read
本文关键字:Net ConnectStream Read System DeFlateStream 重定向 如何 | 更新日期: 2023-09-27 18:09:58
在调试代码的过程中,我发现DeFlateStream。read重定向到System.Net.ConnectStream.Read?当我检查MSDN源代码时,我无法轻松找到此重定向。有人能告诉我这是怎么回事吗?谢谢!
流不会被"重定向" -而是DeflateStream。Read 封装源流的Read方法。
也就是说,包装的DeflateStream被传递给源流(即在构造函数中),因此当Read被调用时,它读取源流(至少在它能产生有效输出的范围内),然后返回它自己的Read1实现的处理结果。
由于子类型(和包含多态性),任何符合IO(并且是IO的子类型)的对象。流可以作为源流提供。对于DeflateStream代码,这确保了包装的_stream有一个合适的Read方法。
提供给构造函数的实际的流对象可以被实现为FileStream、MemoryStream、ResourceStream、ConnectedStream等。
参见多态性(c#编程指南)和。net中的多态性- CodeProject(运行时多态性部分)了解更多详细信息。
1从这里找到的源代码可以看出,它相当于:
public override int Read(byte[] array, int offset, int count) {
// Setup state
while(true) {
// Process buffer into result until..
bytesRead = inflater.Inflate(array, currentOffset, remainingCount);
if(remainingCount == 0) {
// ..read enough, break
}
if (inflater.Finished()) {
// ..or end of source stream, break
}
// Making sure to read more from the source stream as required
// (_stream is a Stream, assigned in the constructor)
int bytes = _stream.Read( buffer, 0, buffer.Length);
inflater.SetInput(buffer, 0 , bytes);
}
// ..
}