FileStream、StreamReader/StreamWriter、TextReader/TextWriter知识点归纳

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiana0/article/details/53384698

1、FileStream类
stream常见的类有:文件流FileStream、内存流MemoryStream、压缩流GZipStream、加密流CrypToStream、网络流NetWorkStream。下面以FileStream类为例进行说明介绍。
(1)FileStream类的初始化
传入文件句柄或者文件路径构造文件流,同时可以根据需要传入FileAccess(文件的读写方式)、FileMode(打开文件的方式)、FileShare (控制另一个FileStream 对象对同一个文件的访问类型)、FileOptions(用于创建FileStream 对象的附加选项)等枚举值,还可以传入参数ownsHandle(如果文件句柄将由此 FileStream 实例所有,则为 true;否则为 false)、bufferSize(缓冲区大小)、isAsync(如果异步打开句柄,则为 true;否则为 false)、useAsync(指定使用异步 I/O 还是同步 I/O)、FileSecurity类型的fileSecurity(文件的访问控制和审核安全)。

public FileStream(IntPtr handle, FileAccess access);//文件句柄
public FileStream(SafeFileHandle handle, FileAccess access);//文件句柄
public FileStream(string path, FileMode mode);//文件路径
public FileStream(IntPtr handle, FileAccess access, bool ownsHandle);//文件句柄
public FileStream(SafeFileHandle handle, FileAccess access, int bufferSize);//文件句柄
public FileStream(string path, FileMode mode, FileAccess access);//文件路径
public FileStream(IntPtr handle, FileAccess access, bool ownsHandle, int bufferSize);//文件句柄
public FileStream(SafeFileHandle handle, FileAccess access, int bufferSize, bool isAsync);//文件句柄
public FileStream(string path, FileMode mode, FileAccess access, FileShare share);//文件路径
public FileStream(IntPtr handle, FileAccess access, bool ownsHandle, int bufferSize, bool isAsync);//文件句柄
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize);//文件路径
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, bool useAsync);//文件路径
public FileStream(string path, FileMode mode, FileAccess access, FileShare share, int bufferSize, FileOptions options);//文件路径
public FileStream(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options);//文件路径
public FileStream(string path, FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity fileSecurity);//文件路径

FileAccess枚举的取值可以是:Read、Write、ReadWrite。
FileMode枚举的取值可以是:CreateNew、Create、Open、OpenOrCreate、Truncate、Append。
FileShare枚举的取值可以是:None、Read、Write、ReadWrite、Delete、Inheritable。
FileOptions枚举的取值可以是:WriteThrough、None、Encrypted、DeleteOnClose、SequentialScan、RandomAccess、Asynchronous。
(2)FileStream类的公共方法
FileStream对象提供Read()方法从流中读取字节块并将该数据写入给定缓冲区中、使用Write()方法从缓冲区读取字节块写入流。这两个方法都有对应的异步方法实现。
FileStream对象还提供了ReadByte()和WriteByte()方法用于从文件中读取一个字节和将一个字节写入文件中。
FileStream对象的Flush()方法清除该流的所有缓冲区会使得所有缓冲的数据都将写入到文件系统。
FileStream对象的Seek()方法将该流的当前位置设置为给定值。
(3)其他Stream类
内存流MemoryStream、压缩流GZipStream、加密流CrypToStream、网络流NetWorkStream与FileStream类似都是负责从文件中读取字节,反过来将字节写入文件。
(4)涉及stream的操作需要考虑的问题
stream的基本操作。
编码的问题。
尾部处理的问题。
stream缓存的问题。
资源释放的问题。

2、StreamReader与StreamWriter
以StreamReader为例,StreamWriter的介绍自己去查阅文档。
(1)StreamReader的初始化
StreamReader根据指定的流和文件名进行初始化。参数还可以传入detectEncodingFromByteOrderMarks(指示是否在文件头查找字节顺序标记)、encoding(字符编码)、bufferSize(缓冲区大小)。

public StreamReader(Stream stream);//流
public StreamReader(string path);//文件名
public StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks);//流
public StreamReader(Stream stream, Encoding encoding);//流
public StreamReader(string path, bool detectEncodingFromByteOrderMarks);//文件名
public StreamReader(string path, Encoding encoding);//文件名
public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks);//流
public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks);//文件名
public StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize);//流
public StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int bufferSize);//文件名

(2)StreamReader的公共属性
BaseStream 返回基础流。
CurrentEncoding 获取当前 StreamReader 对象正在使用的当前字符编码。
EndOfStream 获取一个值,该值表示当前的流位置是否在流的末尾。
(3)StreamReader的公共方法
Read()方法,读取输入流中的下一个字符或下一组字符。
ReadLine(),从当前流中读取一行字符并将数据作为字符串返回。
ReadToEnd(),从流的当前位置到末尾读取流。
Peek(),返回下一个可用的字符,但不使用它。
(4)StreamXXXX与FileStream的区别
StreamXXXX操作的是字符数据(char),而FileStream操作的是字节数据(byte)。FileStream与StreamXXXX类的默认编码都是UTF8,而一个中文字符占2个字符,所以StreamXXXX类常用于文本的打开与保存,而FileStream则用于数据的传输。FileStream不能指定编码,StreamXXXX可以。FileStream可以指定FileMode、FileAccess、FileShare、FileOptions等各种文件访问控制权限、共享权限等,大大扩展了文件读写的灵活性,StreamXXXX不可以。FileStream提供了异步读写的操作方法BeginRead/BeginWrite,StreamXXXX没有。

3、TextReader和TextWriter
同样以TextReader为例,TextWriter的介绍自己去查阅文档。
TextReader是StreamReader的父类,提供了方法Read()、ReadLine()、ReadToEnd()、Peek()等方法的定义,TextReader会重写这些方法。另外还提供了ReadBlock()方法,该方法 和Read方法基本一致,区别是从效率上来说ReadBlock更高点,而且ReadBlock并非属于线程安全,使用时要注意。除了StreamReader外,StringReader也继承自TextReader。

猜你喜欢

转载自blog.csdn.net/tiana0/article/details/53384698
今日推荐