一个Stream的封装——WrapStream

写代码的时候经常遇到要将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可能也不够完善,后续有更正再补充。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值