分析.NET基础库源码,学习Stream类及相关类
2013-04-23 14:20
288 查看
反编译工具查看基础库源码,绘制简单的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类处理二进制数据流。参考:/article/6439600.html
相关文章推荐
- nginx 源码学习笔记(七)——内存分配相关源码分析
- nginx 源码学习笔记(七)——内存分配相关源码分析
- 深入学习Django源码基础12 - 简要分析Django中template模块2
- Dubbo 源码学习(一)基础知识及使用的相关技术
- 深入学习Django源码基础15 - views简要分析学习
- 【Java基础】Java学习之ArrayList源码常用方法分析
- java核心基础--jdk源码分析学习--LinkedList
- java8学习之Stream源码分析
- Linux 学习数据专题【管理、编程、源码分析】——Linux相关图书选购指南
- 深入学习Django源码基础9 - 简单分析DjangoORM部分
- HLS学习(三)HLSDownloader源码分析(2)相关的数据结构
- 深入学习Django源码基础14 - Django中forms简要分析
- 深入学习Django源码基础16 - django中信号的学习分析
- java核心基础--jdk源码分析学习--String
- 深入学习Django源码基础17 - django中messagee分析学习
- java核心基础--jdk源码分析学习--HashSet
- java核心基础--jdk源码分析学习--Hashtable
- nginx 源码学习笔记(七)——内存分配相关源码分析
- java核心基础--jdk源码分析学习--TreeMap
- dubbo源码学习(一)基础知识及使用的相关技术