ChunkedZIP响应中的块长度不正确

时间:2018-09-27 23:39:51

标签: c# gzip

所以我在做什么:

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));
}

0 个答案:

没有答案