jor*_*hmv 29 c# memorystream httphandler stream
我有一个HttpHandler返回一个图像Response.OutputStream.我有以下代码:
_imageProvider.GetImage().CopyTo(context.Response.OutputStream);
Run Code Online (Sandbox Code Playgroud)
GetImage()方法返回一个Stream实际上是MemoryStream实例的实例,它返回0个字节到浏览器.如果我更改GetImage()方法签名以返回a MemoryStream并使用以下代码行:
_imageProvider.GetImage().WriteTo(context.Response.OutputStream);
Run Code Online (Sandbox Code Playgroud)
它工作,浏览器获取图像.那么在MemoryStream类中WriteTo和CopyTo之间的区别是什么,以及Stream在GetImage()方法签名中使用class 的推荐方法是什么.
Bro*_*ass 44
WriteTo()在复制数据之前将读取位置重置为零 - CopyTo()另一方面,将复制流中当前位置之后剩余的任何数据.这意味着如果您没有自己重置位置,则根本不会读取任何数据.
您很可能在第一个版本中错过了以下内容:
memoryStream.Position = 0;
Run Code Online (Sandbox Code Playgroud)
Roy*_*mir 12
根据反射器,这是CopyTo()方法定义:
private void InternalCopyTo(Stream destination, int bufferSize)
{
int num;
byte[] buffer = new byte[bufferSize];
while ((num = this.Read(buffer, 0, buffer.Length)) != 0)
{
destination.Write(buffer, 0, num);
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里看不到任何"遗留机制"......它将所有内容复制this到目的地(缓冲区大小的块).