Я пытаюсь прочитать поток ответов из объекта HttpWebResponse. Я знаю длину потока (_response.ContentLength), однако я продолжаю получать следующее исключение:ArgumentOutOfRangeException при чтении байтов из потока
Указанный аргумент был вне диапазона допустимых значений. Имя параметра: размер
Во время отладки, я заметил, что в момент возникновения ошибки, значения были такими:
длина = 15032 // длина потока, как это определено _response.ContentLength
BytesToRead = 7680 // число байтов в потоке, который по-прежнему должны быть считаны
BytesRead = 7680 // число байтов, которые были считаны (смещение)
body.length = 15032// размер байта [] поток копируется в
Особенность заключается в том, что переменные bytesToRead и bytesRead являются ALWAYS 7680 независимо от размера потока (содержащегося в переменной длины). Есть идеи?
Код:
int length = (int)_response.ContentLength;
byte[] body = null;
if (length > 0)
{
int bytesToRead = length;
int bytesRead = 0;
try
{
body = new byte[length];
using (Stream stream = _response.GetResponseStream())
{
while (bytesToRead > 0)
{
// Read may return anything from 0 to length.
int n = stream.Read(body, bytesRead, length);
// The end of the file is reached.
if (n == 0)
break;
bytesRead += n;
bytesToRead -= n;
}
stream.Close();
}
}
catch (Exception exception)
{
throw;
}
}
else
{
body = new byte[0];
}
_responseBody = body;
Вы, сэр, гений. Как я могу исправить вторую проблему (поток заполняется медленнее, чем я его читаю)? Не установил бы bytesToRead = length, чтобы все байты потока были прочитаны? – user345194