我有了3線如下.txt文件:瞭解streamreader和internalbuffer?
A50
B25
C25
這是我的代碼:
FileStream fs = new FileStream(@"E:\1.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs);
textBox1.AppendText(sr.ReadLine() + "\r\n");
textBox1.AppendText(fs.Position.ToString());
現在運行後以上代碼,輸出將是:
A50
我的問題是,爲什麼位置值是14?爲什麼它不是4,因爲流的指針會指向第一行A50末尾的'\ n'字符?這與內部緩衝區有關嗎?什麼是內部緩衝區以及它如何與流讀取器一起工作?
對不起英語不好。
請注意,即使「StreamReader」沒有讀取任何額外的數據,文件位置仍然至少爲8,因爲每個字符佔用兩個字節,而不是一個。你確定你想要字節而不是字符嗎? (字符需要2個字節 - 這是默認的,除非你使用ASCII或ANSI文本。) – 2013-05-13 18:37:31
@MthetheWWatson:字符*可能會佔用多於一個字節。你提到了ASCII和ANSI。雖然沒有ANSI編碼,但有很多* 8位編碼。 UTF-8中的單個字符長度可以是1到7個字節。說「每個字符佔用兩個字節」僅適用於相對少量的編碼。 – 2013-05-13 19:02:31
@JimMischel儘管如此,如果你看看OP發佈的實際代碼,你可以看到他使用的是默認編碼,所以每個字符肯定至少有2個字節。我所做的一點是,對於* default *編碼,每個字符(至少)爲2個字節,這很重要。 – 2013-05-13 19:17:47