如何DeFlateStream.重定向到System.Net.ConnectStream.Read

本文关键字:Net ConnectStream Read System DeFlateStream 重定向 如何 | 更新日期: 2023-09-27 18:09:58

在调试代码的过程中,我发现DeFlateStream。read重定向到System.Net.ConnectStream.Read?当我检查MSDN源代码时,我无法轻松找到此重定向。有人能告诉我这是怎么回事吗?谢谢!

如何DeFlateStream.重定向到System.Net.ConnectStream.Read

流不会被"重定向" -而是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);
    }
    // ..
}