码迷,mamicode.com
首页 > Windows程序 > 详细

File FileStream StreamReader StreamWriter C#

时间:2018-04-08 15:53:19      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:直接   函数参数   存在   本质   字符   amr   操作   类的构造函数   string   

存在各种各样的IO设备,比如说文件File类(字符串文件和二进制文件),可以直接使用File类对文件进行读写操作。

 

这些各种IO的读取和写入是通过流的形式实现的,基类为Stream,针对各种不同的IO设备,就有FileStream,MemoryStream。

FileStream可以实现任意格式,任意大小文件的读取,但是它的方法只能读取字节,不能直接读取读字符串或读一行等等,操作偏底层。

 

各种流的专用读写类Reader和Writer,主要用于方便读写文本和字符串,这些类中不仅可以用来读取字节,也可以直接用于读取字符串或读一行。这些读写类的构造函数参数既可以是一个对应的流对象,也可以指定对应的文件路径。例如TEXT,String,Stream,HTTP都有对应的读写类。

 

File

小的文本文件(100M以下)直接用File类的ReadAllText()和WriteAllText()方法
这两个方法内部其实就是封装了StreamReader类的ReadToEnd()和StreamWriter类的WriteToEnd(),
这两个方法的返回值都是string类型,所以只能读写文本文件

小的文本文件的单行读写用StreamReader和StreamWriter这两个类

小的非文本文件用File类的ReadAllBytes()和WriteAllBytes()读写,并用byte[]作中转站
这两个方法内部其实就是封装了FileStream的Read()和Write()方法,
这两个方法的返回值都是byte数组,所以可以读写任何文件

大文件
但用File读写特大文件是会出错的,因为它虽然本质上用的是FileStream来读写,但是它的byte[]大小是写死了的(就是被读写文件的大小),所以它是将文件一次性全部读取或写入,文件非常大的时候往往会造成内存溢出,所以要用数据流FileStream,因为我们可以自由定义byte[]的大小,来保证内存不会溢出。

 

StreamReader, StreamWriter

其中的BaseStream中的Position并不能准确反映当前位置,发现Position是以2048为一个步幅增加的,因此明白是由于StreamReader采取了Buffer所致的。通过在.NET Framework SDK中查找发现,通过构造函数可以指定StreamReader的buffer size,但最小值是128,也就是,无法禁用StreamReader的buffer。

 

读写文件怎么样选取合适的类进行操作

首先看文件大小——如果是大文件则用FileStream,如果是小文件则看是否是文本文件——非文本文件则用File类的 ReadAllBytes/WriteAllBytes,是文本文件则看是否是单行读写——是则用StreamReader类/StreamWriter 类,不是则用File类的ReadAllText/WriteAllText。

任意类型的文件都可以用FileStream来读写

 

File FileStream StreamReader StreamWriter C#

标签:直接   函数参数   存在   本质   字符   amr   操作   类的构造函数   string   

原文地址:https://www.cnblogs.com/suntp/p/8744971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!