为什么缓冲区大小会改变我的流输出?

时间:2010-01-29 22:11:50

标签: c# .net stream

我正在尝试流式传输pdf文件。大多数文件打开没有任何问题,但有时它失败。当它失败时,它看起来也像文件大小小于原始文件。例如,我试图打开47K文件,但当流式输出到浏览器时,它只有44.5K。检查流的大小(result.FileStream)时,它应该是47K。

我正在使用Stream.Read将文件输出到浏览器。当我遇到问题时,我使用的是10000字节的缓冲区大小。但是,当我将缓冲区大小从10000更改为1000时,问题就消失了,我能够使用该文件。我无法解释为什么缓冲区大小的变化会使流式传输的行为不同。

以下是我使用的代码result.FileStrea m的类型为Stream:

using (result.FileStream)
{
    int length;
    const int byteSize = 1000;
    var buffer = new byte[byteSize];

    while ((length = result.FileStream.Read(buffer, 0, byteSize)) > 0 && Response.IsClientConnected)
    {
        Response.OutputStream.Write(buffer, 0, length);
        Response.Flush();
    }
}

Response.Close();

请赐教,因为我肯定不明白。

1 个答案:

答案 0 :(得分:2)

你正在使用Response.Close(),这似乎比文档会让你相信更邪恶。

http://forums.iis.net/t/1152058.aspx