I/O系统

来源:互联网 发布:简单图表制作软件 编辑:程序博客网 时间:2024/06/07 01:41

I/O系统

 

1.基本概念

数据流:是一种产生或使用信息的抽象,一下分字节数据流和字符数据流;

字节数据流与字符数据流:字节数据流可以处理ASCII字符集,但不适合处理Unicode编码的字符,字符数据流可以处理后者;

2.字节数据流类(Stream类)

System.IO.StreamStream类代表字节数据流,是抽象类,是所有其它数据流类的基类,包括一些常用的方法和属性;

http://msdn.microsoft.com/en-us/library/system.io.stream.aspx

Stream类派生出一些具体的字节数据流类,如BufferedStreamFileStreamMemoryStreamUnmanagedMenoryStream;(暂不需了解)

3.字符数据流类

TextReaderTextWrite代表字符数据流,是抽象类,是所有其它字符数据流的基类,包括一些常用的方法和属性;

http://msdn.microsoft.com/en-us/library/system.io.textreader.aspx

http://msdn.microsoft.com/en-us/library/system.io.textwriter.aspx

实现TextReaderTextWrite类的一些数据流类包括:StreamReaderStreamWriterStringReaderStringWriter;(暂不需了解)

4.控制台I/O

第一次看书时,一直没理清控制台I/O和字符数据流类的关系,故重新梳理一遍。

首先介绍标准数据流(字符数据流),即Console.InConsole.OutConsole.Error;(只需要知道有这标准数据流说法就行)

其次要理清Console.In数据流、Console类、TextReader类之间的关系。

Console.InConsole类的属性,此属性可返回TextReader类的对象,故可理解书本上说“Console.In数据流是TextReader类的一个实例”,Console.In.Read()其实就是调用TextReaderRead()方法,TextReader.Read()。

       接着需要理解Console.Read()方法,上图是Console.Read()方法的代码,返回的是In.Read(),那Console.Read()就是先调用Console.In属性实例化TextReader,然后调用其Read()方法,等同于Console.In.Read()

对于Console.Read(),需要注意的是它是逐行缓冲输入,即必须按enter键之后才会被输入,但于此同时除了输入的值以外还会顺带输入(Windows下是回车符和换行符)\n\r.分析以下代码:

int a =Console.Read();

           int b =Console.Read();

           int c =Console.Read();

           int d =Console.Read();

           int e =Console.Read();

       int f =Console.Read();

          Console.Write (a);

           Console.Write (b);

          Console.Write (c);

           Console.Write (d);

           Console.Write (e);

       Console.Write (f);

输入值为:1

         2

输出为:491ascii13(回车符ascii10(换行符ascii 50 1310

       其它ReadLine()等方法原理同上。

 

 

原创粉丝点击