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

本文主要是介绍FileStream、StreamReader/StreamWriter、TextReader/TextWriter知识点归纳,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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。

这篇关于FileStream、StreamReader/StreamWriter、TextReader/TextWriter知识点归纳的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/870794

相关文章

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

C#中的 StreamReader/StreamWriter 使用示例详解

《C#中的StreamReader/StreamWriter使用示例详解》在C#开发中,StreamReader和StreamWriter是处理文本文件的核心类,属于System.IO命名空间,本... 目录前言一、什么是 StreamReader 和 StreamWriter?1. 定义2. 特点3. 用

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

C++语法知识点合集:11.模板

文章目录 一、非类型模板参数1.非类型模板参数的基本形式2.指针作为非类型模板参数3.引用作为非类型模板参数4.非类型模板参数的限制和陷阱:5.几个问题 二、模板的特化1.概念2.函数模板特化3.类模板特化(1)全特化(2)偏特化(3)类模板特化应用示例 三、模板分离编译1.概念2.模板的分离编译 模版总结 一、非类型模板参数 模板参数分类类型形参与非类型形参 非类型模板

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(