因为它虽然本质上用的是FileStream来读写

时间:2021-09-12 03:30:00

存在各类百般的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来读写