如何正确理解system.io中的类

来源:百度知道 编辑:UC知道 时间:2024/07/08 14:11:53
最近想对命名空间system.io下的功能做一个总结,但是现在却觉得异常混乱,比如stringreader、streamreader、textreader、filestream、file等等这些类,貌似很多都能实现相同的功能,但是他们又有一些区别,所以现在的问题是,当在项目中时,我很茫然到底用哪个。不知道有谁能理清这些类的,麻烦说下你们的心得体会~~谢谢~
拒绝复制粘贴~~谢谢

那,就拿你举得这几个类说吧

你要知道StringReader,StreamReader,TextReader是一个什么关系,TextReader是一个抽象类,他表示的意义是一个文本的读取器(相同的有TextWriter),什么叫文本的读取器,就是说他从底层(也许是流)读取string出来,主要的是ReadLine方法。那么针对不同的底层有不同的读取器,其中StreamReader是从一个流来获取数据的,而StringReader和Stream没关系了,直接从一个字符串string读取,想一个包装器一样把一个string伪装成一个TextReader。

然后是流,刚刚说了StreamReader是从流来的,那么必定有各种各样的流类型,其中FileStream是最常见的一种流了,从一个文件中获取一个流对象。那么还有很多别的类型的,比如MemoryStream,他是把内存的一部分当作一个流来处理,还有NetworkStream,代表一个网络流,比如你请求一个网站的时候就会用到它,CryptoStream是一种加密解密用的流,而GZipStream是压缩用的。其实StreamReader不需要关心底层是什么流,只需要知道他是一个Stream就行了

至于File类,算是一个快速完成任务所提供的快捷方式,比如如果从一个文件中读取所有的文本,那么你需要一个FileStream,一个StreamReader,然后还要释放他,很麻烦,那么使用File类的ReadAllText可以一句话完成任务。

通常来说看你需要使用高级功能多还是简单完成任务多,比如你需要从一个文件中解压数据流同时解密同时读取文本,那么File类根本无法提供这样的功能,你需要自己写各种流包装在一起,那么如果仅仅是需要读取所有数据的话,那么File.ReadAllText是再好不过了,一方面可以让你的代码简洁,可读性好,另一方面也让你出错的几率降低,减少bug