Difference between Stream.CopyTo and MemoryStream.WriteTo
Solution 1
WriteTo()
is resetting the read position to zero before copying the data - CopyTo()
on the other hand will copy whatever data remains after the current position in the stream. That means if you did not reset the position yourself, no data will be read at all.
Most likely you just miss the following in your first version:
memoryStream.Position = 0;
Solution 2
According to reflector, this is the CopyTo() method definition:
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);
}
}
I dont see any "remains mechanism" here... It copies everything from this
to destination ( in blocks of buffer size ).
Comments
-
jorgehmv about 4 years
I have a HttpHandler returning an image through
Response.OutputStream
. I have the following code:_imageProvider.GetImage().CopyTo(context.Response.OutputStream);
GetImage()
method returns aStream
which is actually aMemoryStream
instance and it is returning 0 bytes to the browser. If i changeGetImage()
method signature to return aMemoryStream
and use the following line of code:_imageProvider.GetImage().WriteTo(context.Response.OutputStream);
It works and the browser gets an image. So what is the difference between WriteTo and CopyTo in MemoryStream class, and what is the recommended way to make this works using
Stream
class inGetImage()
method signature.