使用 .NET 4.0、IIS 7.5 (Windows Server 2008 R2)。我想流出大约 10 MB 的二进制内容。内容已经在 MemoryStream 中。我想知道 IIS7 是否会自动分块输出流。从客户端接收流,这两种方法之间有什么区别:
//#1: Output the entire stream in 1 single chunks
Response.OutputStream.Write(memoryStr.ToArray(), 0, (int) memoryStr.Length);
Response.Flush();
//#2: Output by 4K chunks
byte[] buffer = new byte[4096];
int byteReadCount;
while ((byteReadCount = memoryStr.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, byteReadCount);
Response.Flush();
}
提前感谢您的帮助。
我没有尝试通过原始数据流的第二个建议。内存流确实是从 Web 请求的响应流中填充的。这是代码,
HttpWebRequest webreq = (HttpWebRequest) WebRequest.Create(this._targetUri);
using (HttpWebResponse httpResponse = (HttpWebResponse)webreq.GetResponse())
{
using (Stream responseStream = httpResponse.GetResponseStream())
{
byte[] buffer = new byte[4096];
int byteReadCount = 0;
MemoryStream memoryStr = new MemoryStream(4096);
while ((byteReadCount = responseStream.Read(buffer, 0, buffer.Length)) > 0)
{
memoryStr.Write(buffer, 0, byteReadCount);
}
// ... etc ... //
}
}
你认为它可以安全地将 responseStream 传递给 Response.OutputStream.Write() 吗?如果是,你能建议一种经济的方式吗?如何将 ByteArray + 确切的流长度发送到 Response.OutputStream.Write()?