C#BinaryReader ReadBytes(len)返回与Read(bytes,0,len)不同的结果

时间:2017-06-26 19:48:00

标签: c# binaryreader

我有一个BinaryReader读取数组的字节数。读者的基础流是BufferedStream(其基础流是网络流)。我注意到有时reader.Read(arr, 0, len)方法返回的结果与reader.ReadBytes(len)不同(错误)。

基本上我的设置代码如下所示:

var httpClient = new HttpClient();
var reader = new BinaryReader(new BufferedStream(await httpClient.GetStreamAsync(url).ConfigureAwait(false)));

稍后,我正在读取读者的字节数组。我可以确认两种情况下的sz变量是相同的。

int sz = ReadSize(reader); //sz of the array to read
if (bytes == null || bytes.Length <= sz)
{
    bytes = new byte[sz];
}

//reader.Read will return different results than reader.ReadBytes sometimes
//everything else is the same up until this point
//var tempBytes = reader.ReadBytes(sz); <- this will return right results
reader.Read(bytes, 0, sz); // <- this will not return the right results sometimes

看起来像reader.Read方法正在进一步读取流而不是它需要的内容,因为在发生这种情况后,其余的解析将会中断。显然我可以坚持使用reader.ReadBytes,但是我想在这里重用字节数组以便于GC。

是否有任何理由会发生这种情况?设置是错还是什么?

1 个答案:

答案 0 :(得分:0)

确保在调用此函数之前清除bytes数组,因为Read(bytes, 0, len)不清除给定的字节数组,因此某些先前的字节可能与新字节冲突。我很久以前在我的一个解析器中也遇到过这个问题。只需将所有元素设置为零,或确保您只读取(解析)到给定的len