_Response.OutputStream
_を介して画像を返すHttpHandlerがあります。私は次のコードを持っています:
__imageProvider.GetImage().CopyTo(context.Response.OutputStream);
_
GetImage()
メソッドは、実際にはStream
インスタンスであるMemoryStream
を返し、ブラウザに0バイトを返します。 GetImage()
メソッドシグネチャを変更してMemoryStream
を返し、次のコード行を使用する場合:
__imageProvider.GetImage().WriteTo(context.Response.OutputStream);
_
動作し、ブラウザは画像を取得します。では、MemoryStreamクラスのWriteToとCopyToの違いは何ですか。また、GetImage()
メソッドシグネチャのStream
クラスを使用してこれを機能させるための推奨される方法は何ですか。
WriteTo()
は、データをコピーする前に読み取り位置をゼロにリセットしています-一方、CopyTo()
は、ストリームの現在の位置の後に残っているデータをコピーします。つまり、自分で位置をリセットしなかった場合、データはまったく読み取られません。
ほとんどの場合、最初のバージョンで次のものを逃すだけです:
memoryStream.Position = 0;
リフレクターによると、これは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);
}
}
ここに「残存メカニズム」はありません... this
から宛先にすべてをコピーします(バッファーサイズのブロック単位)。