StreamReader和StreamWriter说明

Posted huang34

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StreamReader和StreamWriter说明相关的知识,希望对你有一定的参考价值。

StreamReader/StreamWriter操作的是字符数据(char),而FileStream操作的是字节数据(byte)

FileStream与StreamXXXX类的默认编码都是UTF8,而一个中文字符占2个字符,所以StreamXXXX类常用于文本的打开与保存,而FileStream则用于数据的传输。

StreamReader sw = new StreamReader(Stream stream);
StreamReader sw = new StreamReader(string path);

//为指定的流/文件名初始化 StreamReader 类的新实例,并且使用默认的编码(UTF-8)读取文件

StreamReader sw = new StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks);
StreamReader sw = new StreamReader(string path, bool detectEncodingFromByteOrderMarks);

//用指定的字节顺序(BOM)标记检测选项,为指定的流/文件名初始化 StreamReader 类的一个新实例

StreamReader sw = new StreamReader(Stream stream, Encoding encoding);
StreamReader sw = new StreamReader(string path, Encoding encoding);

//用指定的字符编码为指定的流/文件名初始化 StreamReader 类的一个新实例,因为有些编码(如GB2312、UTF7)就没有BOM,就认不到编码,就需要手动指定一个编码。

StreamReader sw = new StreamReader(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks);
StreamReader sw = new StreamReader(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks);

//为指定的流/文件名初始化 StreamReader 类的新实例,带有指定的字符编码和字节顺序标记检测选项。

StreamReader sw = new StreamReader(Stream stream, bool detectEncodingFromByteOrderMarks, int bufferSize);
StreamReader sw = new StreamReader(string path, bool detectEncodingFromByteOrderMarks, int bufferSize);

//为指定的流/文件名初始化 StreamReader 类的新实例,带有指定的字符编码、字节顺序标记检测选项和缓冲区大小。

1:public override int Read(); //读取输入流中的下一个字符并使该字符的位置提升一个字符,返回的是十进制字符

StreamReader sr = new StreamReader(@"d:/source.txt", Encoding.UTF8);
int Ichar = 0;
//不再有可用的字符,则为 -1  例如读取其中一个字符十进制是29992 则转为ASCII字符是“用”
 while ((Ichar = sr.Read()) != -1)
    {
        Console.WriteLine(Ichar+"="+Convert.ToChar(Ichar).ToString());//将int类型转成ASCII字符  
  }

 结果如下

技术分享图片

 2:public override int Read(char[] buffer, int index, int count);  //Read(字节数组,数组使用的开始位置,读取字节的个数)

buffer是空存储间,先把从index开始位置读取count个的十进制字符复制到buffer,然后再读取剩余的字符

StreamReader sr = new StreamReader(@"d:/source.txt", Encoding.UTF8);
char[] buffer = new char[512];
int readCount = sr.Read(buffer, 0, 512);
for (int i = 0; i < readCount; i++)
{
    Console.WriteLine(i+"="+buffer[i].ToString());
}

技术分享图片

技术分享图片

 3:public override string ReadLine()  //行读入,返回值是字符串

StreamReader sr = new StreamReader(@"d:/source.txt", Encoding.UTF8);
string strLine = null;
while ((strLine = sr.ReadLine()) != null)
{
    Console.WriteLine(strLine);
}

4:public override string ReadToEnd() //从开始位置读取到末尾

5:public override int Peek() //读取下一个字符

6:EndOfStream  // 获取一个值,该值表示当前的流位置是否在流的末尾

7:CurrentEncoding // 获取当前 StreamReader 对象正在使用的当前字符编码

StreamWriter sw = new StreamWriter(Stream stream);
StreamWriter sw = new StreamWriter(string path);
StreamWriter sw = new StreamWriter(Stream stream,Encoding encoding);
StreamWriter sw = new StreamWriter(Stream stream,Encoding encoding,int bufferSize);
//用指定的编码及缓冲区大小,为指定的流初始化 StreamWriter 类的新实例。int为缓冲区大小
StreamWriter sw = new StreamWriter(string path,bool append,Encoding encoding);
StreamWriter sw = new StreamWriter(string path,bool append,Encoding encoding,int bufferSize);

//使用指定编码和缓冲区大小,为指定路径上的指定文件初始化 StreamWriter 类的新实例。true表示如果该文件存在,则可以向其追加。false表示将其全部重写。如果该文 件不存在,则此构造函数将创建一个新文件。    

以上是关于StreamReader和StreamWriter说明的主要内容,如果未能解决你的问题,请参考以下文章

StreamReader 和 StreamWriter 简单调用

FileStream读写文件StreamWriter 和 StreamReader

C#中FileStream和StreamWriter/StreamReader的区别

C# StreamReader类和StreamWriter类

StreamWriter 在其包裹的 Pipe 未排空时无法关闭?

StreamReader 和可移植类库