C# 为什么在连接到网络的流上使用Read函数会得到不一致的结果?

C# 为什么在连接到网络的流上使用Read函数会得到不一致的结果?,c#,networking,stream,C#,Networking,Stream,我使用的是一个简单的函数:- while((br.Read(downbuffer, 0, downbuffer.Length)>0) { //Write the data in downbuffer to a file. } 虽然它对一个文件(在一个zip文件下载中测试了多次)运行良好,但当链接指向一个HTML文件(在上测试)时它就不工作了。对于后面的链接,它只下载和写入约1KB的数据,而页面的大小约为60KB。 如果它与没有被刷新或其他事情有关,想知道它是如何处理下载的文件的?

我使用的是一个简单的函数:-

while((br.Read(downbuffer, 0, downbuffer.Length)>0)
{
    //Write the data in downbuffer to a file.
}
虽然它对一个文件(在一个zip文件下载中测试了多次)运行良好,但当链接指向一个HTML文件(在上测试)时它就不工作了。对于后面的链接,它只下载和写入约1KB的数据,而页面的大小约为60KB。 如果它与没有被刷新或其他事情有关,想知道它是如何处理下载的文件的?相关代码如下:-(在单独的线程中运行)-

totalpath指向一个文件,没有什么特别的。
下行缓冲区大小为20KB,我的网速约为60Kbps(512kbps)。

您可以通过避免它来解决整个问题:

using (var client = new WebClient())
{
    client.DownloadFile(uri, totalpath);
}

您可以通过避免它来解决整个问题:

using (var client = new WebClient())
{
    client.DownloadFile(uri, totalpath);
}

如果你只是简单地将一个流复制到另一个流,为什么要使用二进制编写器和读取器?我脑子里还有其他事情,我需要这样开始。现在解释起来有点困难,但我知道现在就要这么做了。BinaryReader:以特定编码将原始数据类型作为二进制值读取。那不是你想要的,是吗?读写方法在底层流上可用。用BinaryReader/Writer包装是没有意义的。如果你真的想继续这样胡说八道,在你的循环之后试试
bw.Flush
。我也试过bw.Flush(),HTML页面也没有完全下载,第一个链接中的文件也没有在while循环内部(当然它在循环外部)出现任何问题。你只使用
Write(byte[],int,int)
,该方法也可用于裸流。BinaryWriter没有任何用途。如果你只是简单地将一个流复制到另一个流,为什么要使用BinaryWriter和Reader?我脑子里还有其他事情,我需要这样开始。现在解释起来有点困难,但我知道现在就要这么做了。BinaryReader:以特定编码将原始数据类型作为二进制值读取。那不是你想要的,是吗?读写方法在底层流上可用。用BinaryReader/Writer包装是没有意义的。如果你真的想继续这样胡说八道,在你的循环之后试试
bw.Flush
。我也试过bw.Flush(),HTML页面也没有完全下载,第一个链接中的文件也没有在while循环内部(当然它在循环外部)出现任何问题。你只使用
Write(byte[],int,int)
,该方法也可用于裸流。BinaryWriter没有任何用途。我只是想用BinaryReader来做,有办法吗?特别是我想挖掘一点,为什么它不与HTML文件一起工作,而与其他文件工作良好?通过打开文件,我可以看到它下载了一些数据,有时是977字节,有时是987字节,同样。有什么想法吗?我只是想用BinaryReader,有办法吗?特别是我想挖掘一点,为什么它不与HTML文件一起工作,而与其他文件工作良好?通过打开文件,我可以看到它下载了一些数据,有时是977字节,有时是987字节,同样。有什么想法吗?