Чтение потока через stream.read вместо использования StreamReader - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь получить запрос и прочитать его следующим образом:

byte[] buffer;
Stream read = http.GetResponseStream();
string readIt = read.Read(buffer, 0, read.Length)

Но выдается ошибка с недопустимым аргументом.

Любая идея, как получить этот ответ на строку во времяиспользовать Stream вместо StreamReader?

1 Ответ

5 голосов
/ 29 февраля 2012

Это потому, что вы не создали байтовый массив, который пытаетесь использовать.

byte[] buffer = new byte[read.Length];

Обратите внимание, что вы должны проверить значение read.Length, прежде чем использовать его.Длина ответа не всегда известна.

Кроме того, метод Read возвращает также int, а не string.

Кроме того, и это очень важно, вы должны используйте возвращаемое значение из метода Read, так как оно говорит вам, сколько байтов было фактически прочитано.Метод Read не должен возвращать все байты, которые вы запрашиваете, поэтому вы должны выполнить цикл до тех пор, пока он не вернет нулевое значение, что означает, что поток был прочитан до конца:

int offset = 0, len;
do {
  len = read.Read(buffer, offset, read.Length - offset);
  offset += len;
} while (len > 0);

// now offset contains the number of bytes read into the buffer
...