c # - конец считывателя потоков, отображающий значение 65536 ('.') - PullRequest
1 голос
/ 01 марта 2011

Я создал StreamReader, который использует FileStream.В конце метода StreamReader при использовании метода Peek () я вижу числовое значение 65535. При преобразовании в символ представляет период '.'Используя 'watch' в VS, я вижу, что EndOfStream достигнут.Что означает значение 65535 ('.')?Является ли точка ('.') Аналогом ASCII?

Мне показалось, что я слышал, что "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()));
            }

1 Ответ

7 голосов
/ 01 марта 2011

Это означает, что вы произвели StreamReader.Read() * StreamReader.Peek() результат до char до проверки, чтобы проверить, является ли он -1 (что означает, что это конецпотока).Сначала проверьте возвращаемое значение Peek() и остановитесь, если оно -1.

Обратите внимание, что «логический» конец потока может отличаться от фактического конца потока.Вы можете считать, что поток заканчивается, когда вы достигнете нулевого символа, но никто не говорит, что ему когда-либо приходилось достигать этого, и ничто не говорит, что у него не может быть больше данных.Так что будьте осторожны с тем, с кем вы работаете.

О, и в случае, если вам интересно, почему это 65 535 - это 2^16 - 1, что равно 0xFFFF в шестнадцатеричном формате.Это то, что вы получаете, если вы разыгрываете -1 (то есть 0xFFFFFFFF) на char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...