Длина чанка от ChunkedZIP Ответ неверен - PullRequest
0 голосов
/ 28 сентября 2018

Итак, что я делаю:

int blockLength;
try {
    blockLength = Convert.ToInt32(line, 16);
} catch (Exception ex) {
    if (ex is FormatException || ex is OverflowException) {
        throw new Exception("WrongChunkedBlockLength", ex);
    }
    throw;
}
if (blockLength == 0) {
    yield break;
}

(где line = строка, прочитанная из потока, который, как ожидается, будет длиной фрагмента). Это работает нормально, но по любой причине я получаю возвращенныйзначение меньше фактического размера чанка.Под этим я подразумеваю, что я отправляю запрос на Hotels.com, и когда я получаю «размер куска» и затем читаю из потока с размером куска в качестве длины / счетчика, он все это читает, но на самом деле есть еще дополнительные данныечитать за этот кусок.Поскольку теперь код думает, что он прочитал полный фрагмент, он продолжает цикл для продолжения следующего фрагмента, только чтобы получить данные о первых фрагментах.

Вот как я читаю из потока:

int totalBytesRead = 0;
byte[] buffer = new byte[blockLength];
while (totalBytesRead < blockLength) {
    int read = stream.Read(buffer, totalBytesRead, blockLength);
    if (read == 0) {
        WaitData();
        continue;
    }
    totalBytesRead += read;
}

а затем сразу после этого вот что я делаю для дальнейшего тестирования проблемы:

buffer = new byte[90];
while (true) {
    stream.Read(buffer, 0, 10);
    MessageBox.Show(Encoding.ASCII.GetString(buffer));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...