zoukankan      html  css  js  c++  java
  • 分析.NET基础库源码,学习Stream类及相关类

    反编译工具查看基础库源码,绘制简单的UML图

    1.Stream抽象类

             派生出①FileStream、②BufferedStream、③MemoryStream类等

             ①FileStream类有byte[] _buffer私有字段,应该是用来存储获取的数据。根据参数的不同,构造函数分为两类,一类是从路径构造(string path),另一类是从句柄构造(IntPtr handle)。FileStream类可以理解为从磁盘上的文件创建了流。

             ②BufferedStream类有byte[] _buffer私有字段,还有Stream _s私有字段。_buffer应该是用来存储获取的数据,而_s是BufferedStream类对Stream类的一个引用,并且从BufferedStream类的构造函数中可以看到它都是从Stream类构造的(如:public BufferedStream(Stream stream)),说明BufferedStream会对Stream进行相关的操作,可以将BufferedStream理解成是Stream的辅助类,正如名字所说的,是用来缓存数据的。而此处的Stream可以是Stream的派生类。

            ③MemoryStream类有byte[] _buffer私有字段,应该是用来存储获取的数据。它是从byte数组构造的(如:public MemoryStream(byte[] buffer))。MemoryStream类可以理解成是从内存(或数组)创建的流。

    2.TextReader抽象类

             派生出①StreamReader类等

    ①  StreamReader有两个byte[]私有字段,一个char[]私有字段,Stream stream私有字段。构造函数分两类,一是从path构造,另一个是从stream构造。查看从path构造的构造函数源码,发现在内部创建的是FileStream对象,并付给了私有字段stream。所以StreamReader也是Stream的辅助类,会对Stream进行相关的操作。

    TextWriter抽象类派生的StreamWriter类应该是类似的情况。

    3.BinaryReader类

             BinaryReader类有两个byte[]私有字段,两个char[]私有字段,Stream m_stream私有字段。它是从Stream构造的,也是Stream的辅助类。

    4.三者之间的关系:

              Stream类族处理字节数据流,StreamReader类处理字符数据流,BinaryReader类处理二进制数据流。

              参考:http://www.cnblogs.com/jxnclyk/archive/2010/04/03/1703909.html

  • 相关阅读:
    协程-Greenlet
    协程简介-异步IO
    关于__name__=='__main__
    进程池-限制同一时间在CPU上运行的进程数
    STM32丰富的资料网站(库函数手册)
    STM32CubeMX入门之点亮板载LED
    STM32CUBEMX忘记配置sys中的debug导致程序只能下载一次的问题
    GX Works2 存储器空间或桌面堆栈不足 解决方案
    Lua安装报错:编译 Lua 报错:error: readline/readline.h: No such file or directory 问题解决办法
    Ubuntu18.04不能联网问题
  • 原文地址:https://www.cnblogs.com/niaomingjian/p/3037733.html
Copyright © 2011-2022 走看看