I/O系统
1.基本概念
数据流:是一种产生或使用信息的抽象,一下分字节数据流和字符数据流;
字节数据流与字符数据流:字节数据流可以处理ASCII字符集,但不适合处理Unicode编码的字符,字符数据流可以处理后者;
2.字节数据流类(Stream类)
System.IO.Stream,Stream类代表字节数据流,是抽象类,是所有其它数据流类的基类,包括一些常用的方法和属性;
http://msdn.microsoft.com/en-us/library/system.io.stream.aspx
从Stream类派生出一些具体的字节数据流类,如BufferedStream、FileStream、MemoryStream、UnmanagedMenoryStream;(暂不需了解)
3.字符数据流类
TextReader和TextWrite类代表字符数据流,是抽象类,是所有其它字符数据流的基类,包括一些常用的方法和属性;
http://msdn.microsoft.com/en-us/library/system.io.textreader.aspx
http://msdn.microsoft.com/en-us/library/system.io.textwriter.aspx
实现TextReader和TextWrite类的一些数据流类包括:StreamReader、StreamWriter、StringReader、StringWriter;(暂不需了解)
4.控制台I/O
第一次看书时,一直没理清控制台I/O和字符数据流类的关系,故重新梳理一遍。
首先介绍标准数据流(字符数据流),即Console.In、Console.Out、Console.Error;(只需要知道有这标准数据流说法就行)
其次要理清Console.In数据流、Console类、TextReader类之间的关系。
public static TextReader In { get; }
Console.In是Console类的属性,此属性可返回TextReader类的对象,故可理解书本上说“Console.In数据流是TextReader类的一个实例”,Console.In.Read()其实就是调用TextReader的Read()方法,TextReader.Read()。
publicstaticintRead()
{
returnIn.Read();
}
接着需要理解Console.Read()方法,上图是Console.Read()方法的代码,返回的是In.Read(),那Console.Read()就是先调用Console.In属性实例化TextReader,然后调用其Read()方法,等同于Console.In.Read()。
其它ReadLine()等方法原理同上。
转载于:https://blog.51cto.com/gilbertbog/1255641