Как прочитать один символ из объекта NetworkStream в C #? - PullRequest
1 голос
/ 16 декабря 2011

Я ищу эффективный способ чтения одного символа из объектов networkStream. С помощью метода NetworkStream.Read вы можете прочитать массив байтов, а не один символ.

Вот что я пробовал, но застрял после получения массива символов

  public char readChar(NetworkStream networkStreamObj)
  {
      byte[] bytesArray = new byte[8129];
      int n = networkStreamObj.Read(bytesArray, 0, bytesArray.Length);
      char[] charArray = new char[Encoding.ASCII.GetCharCount(bytesArray, 0, n)];
      /**Need help after this line**/
  }

Обратите внимание, что я попробовал другую альтернативу, используя объект StreamReader, но я получил сообщение об ошибке, говорящее о том, что поток не читается.

1 Ответ

1 голос
/ 16 декабря 2011

Поскольку вы читаете ASCII, все, что вам нужно:

int byte = stream.ReadByte();
if(byte < 0) // hadle EOF
else return (char) byte;

В более общем случае, когда кодировки могут быть многобайтовыми, вам следует использовать TextReader, например StreamReader.Это , предназначенное для обработки чтения текста (произвольно Encoding) из потока.

, т.е. с использованием UTF-8

using(var reader = new StreamReader(stream, Encoding.UTF8)) {
    ... consume the class
}

и

int next = reader.Read();
if(next < 0) // handle EOF
else {
    char c = (char)next;
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...