1. 程式人生 > >StreamReader和StreamWriter說明

StreamReader和StreamWriter說明

mar light har utf8 reader 返回值 peek adc sha

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說明