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()等方法原理同上。