问题如下,我正在使用 anHttpWebRequest
从 dmo.gov.uk请求一些在线数据。我正在使用 a 阅读BinaryReader
并写入 a的响应MemoryStream
。我已经将正在使用的代码打包成一个简单的测试方法:
public static byte[] Test(int bufferSize)
{
var request = (HttpWebRequest)WebRequest.Create("http://www.dmo.gov.uk/xmlData.aspx?rptCode=D3B.2");
request.Method = "GET";
request.Credentials = CredentialCache.DefaultCredentials;
var buffer = new byte[bufferSize];
using (var httpResponse = (HttpWebResponse)request.GetResponse())
{
using (var ms = new MemoryStream())
{
using (var reader = new BinaryReader(httpResponse.GetResponseStream()))
{
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, bufferSize)) > 0)
{
ms.Write(buffer, 0, bytesRead);
}
}
return ms.GetBuffer();
}
}
}
我的实际代码通常使用 2048 字节的缓冲区大小,但是我今天注意到该文件末尾有大量空字节 ( \0
),这会使文件大小膨胀。作为测试,我尝试将缓冲区大小增加到接近我预期的文件大小(我期待〜80Kb,所以缓冲区大小为79000),现在我得到了正确的文件大小。但我很困惑,无论用于读取数据的缓冲区大小如何,我都希望获得相同的文件大小。
以下测试:
Console.WriteLine(Test(2048).Length);
Console.WriteLine(Test(79000).Length);
Console.ReadLine();
产生以下输出:
131072
81341
第二个数字,使用高缓冲区大小是我期望的确切文件大小(这个文件每天都在变化,所以预计在今天之后该大小会有所不同)。第一个数字包含\0
预期文件大小之后的所有内容。
这里发生了什么?