2011-03-01 3 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

오버플로와 같이 보이며 스트림을 읽는 방법을 게시 할 수 있습니까? –

답변

7

그것은 당신이 주조 한 의미 StreamReader.Read()StreamReader.Peek()의 결과가 -1 (이 스트림의 마지막의 의미)입니다 있는지 확인 전에 char합니다. 먼저 Peek()의 반환 값을 확인하고 -1이면 중지하십시오.

스트림의 "논리"끝은 스트림의 실제 끝과 다를 수 있습니다. null 문자에 도달하면 스트림이 끝나는 것으로 간주 할 수 있지만 아무도 그 스트림에 도달해야한다고 말하지 않으며 더 많은 데이터를 가질 수 없다고 말하는 것은 없습니다. 따라서 어떤 제품을 사용하고 있는지주의하십시오.

오, 왜 65,535인지 궁금 할 때가 있습니다. 이것은 2^16 - 1이며 16 진수로 0xFFFF입니다. -1 (0xFFFFFFFF)을 char 번으로 전송하면 얻을 수 있습니다.

+0

StreamReader.EndOfStream 속성은 스트림의 "논리적"끝나 스트림의 실제 끝을 검사합니까? – contactmatt

+0

"논리적"끝 부분은 데이터의 끝으로 간주되는 내용 일 뿐이며 컴퓨터는 스트림의 끝을 결정할 때 데이터 자체를 보지 않습니다. 더 많은 데이터가 부족하면 끝입니다. 스트림의 물리적 인 끝만 검사합니다. – Mehrdad

+0

그것은 단지 2^16-1입니다. 우리는 16 비트 (그리고 0xFFFF)라고 말합니다. – xanatos