2011-03-01 69 views
1

我已經創建了一個使用FileStream的StreamReader。在StreamReader方法的末尾,使用Peek()方法時,我看到數字值爲65535.轉換爲char時表示句點'。'在VS中使用'watch',我可以看到EndOfStream已經到達。 65535('。')的值是什麼意思?它的ASCII碼對應的時間是('。')嗎?c# - 流讀取器結束顯示值65536('。')

我以爲我聽說'0'代表文件/流的結束。

注:如果流正在使用文件,我不確定EOF和EOS之間是否存在差異(流結束)。

//Contains some business logic, main focus is on the while loop expression 
    try 
      { 
       //The peek method is used to avoid moving the Stream's position. 
       //If we don't encounter a number character representing the RDW, keep reading until we find one. 
       while (!Char.IsDigit((char)this.StreamReader.Peek())) 
       { 
        if (!this.StreamReader.EndOfStream) 
         this.StreamReader.Read(); 
        else 
         return false; 
       } 
       //Loop completed and found the next record without encountering the end of the stream 
       return true; 
      } 
      catch (IOException IOex) 
      { 
       throw new Exception(String.Format("An IO Exception occured when attempting to set the start position of the record.\n\n{0}", IOex.ToString())); 
      } 
+0

它看起來像某種溢出,可以張貼你如何閱讀流? – 2011-03-01 16:10:37

回答

7

這意味着你已經鑄造 StreamReader.Read()StreamReader.Peek()的結果char檢查,看看它是否-1(這意味着它的流的末尾)。首先檢查返回值Peek(),如果它是-1則停止。

請注意,流的「邏輯」端可能與流的實際結尾不同。你可能會認爲當你到達一個空字符時流會結束,但沒有人說它必須達到這個目的,沒有人說它不能有更多的數據。所以要小心你正在使用哪一個。

哦,如果你想知道爲什麼它是65,535 - 那是2^16 - 1這是十六進制的0xFFFF。如果您將-1(即0xFFFFFFFF)投射到char,就會得到這個結果。

+0

StreamReader.EndOfStream屬性檢查流的「邏輯」結尾還是流的實際結尾? – contactmatt 2011-03-01 16:19:24

+0

「邏輯」端只是你認爲是數據結束的地方,但是當確定數據流結束時,計算機不會自己查看數據本身。如果它只是用完更多的數據就結束了;它只檢查流的物理結束。 – Mehrdad 2011-03-01 16:20:28

+0

它只有2^16 - 1.我們講的是16位(和0xFFFF) – xanatos 2011-03-01 16:34:43