写代码的时候经常遇到要将stream里面的某些函数修改一下,方便打桩或提供新功能。但由于CLR里面提供的Stream大部分都是sealed类型的。这个时候我们往往通过新建一个Stream类来封装现有stream成新stream。
class WrapStream : Stream
{
Stream stream;
public WrapStream(Stream stream)
{
this.stream = stream;
}
public override bool CanRead { get { return stream.CanRead; } }
public override bool CanSeek { get { return stream.CanSeek; } }
public override bool CanWrite { get { return stream.CanWrite; } }
public override long Length { get { return stream.Length; } }
public override long Position
{
get { return stream.Position; }
set { stream.Position = value; }
}
public override void Flush()
{
stream.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return stream.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return stream.Seek(offset, origin);
}
public override void SetLength(long value)
{
stream.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
stream.Write(buffer, offset, count);
}
public override void Close()
{
stream.Close();
}
protected override void Dispose(bool disposing)
{
stream.Dispose();
}
}
虽然本身这个实现并不难,但由于.net并没有内置这个wrapstream,每次都要实现有点烦,这里记录一下,以后再用的时候直接继承这个WrapStream,只重写需要特化的部分即可。另外,这个WrapStream可能也不够完善,后续有更正再补充。