如何解决计算Stream中的读写次数
计算Stream写入和读取的字节数的正确方法是什么?
从Stream和重载方法派生很容易。
问题是任何Read **方法都可以调用其他Read **方法,然后我可能会数两次。
为此有合适的解决方案吗?
假设我为Stream做包装,我应该在哪里增加读写计数?
public class CountStream : Stream
{
private readonly Stream _stream;
protected CountStream (Stream stream) => _stream = stream;
public override object InitializeLifetimeService() => _stream.InitializeLifetimeService();
public override IAsyncResult BeginRead(byte[] buffer,int offset,int count,AsyncCallback callback,object? state) => _stream.BeginRead(buffer,offset,count,callback,state);
public override IAsyncResult BeginWrite(byte[] buffer,object? state) => _stream.BeginWrite(buffer,state);
public override void Close()
{
_stream.Close();
}
public override int EndRead(IAsyncResult asyncResult) => _stream.EndRead(asyncResult);
public override void EndWrite(IAsyncResult asyncResult)
{
_stream.EndWrite(asyncResult);
}
public override void Flush()
{
_stream.Flush();
}
public override Task FlushAsync(CancellationToken cancellationToken) => _stream.FlushAsync(cancellationToken);
public override int Read(byte[] buffer,int count) => _stream.Read(buffer,count);
public override int Read(Span<byte> buffer) => _stream.Read(buffer);
public override Task<int> ReadAsync(byte[] buffer,CancellationToken cancellationToken) => _stream.ReadAsync(buffer,cancellationToken);
public override ValueTask<int> ReadAsync(Memory<byte> buffer,CancellationToken cancellationToken = new CancellationToken()) => _stream.ReadAsync(buffer,cancellationToken);
public override int ReadByte() => _stream.ReadByte();
public override long Seek(long offset,SeekOrigin origin) => _stream.Seek(offset,origin);
public override void SetLength(long value)
{
_stream.SetLength(value);
}
public override void Write(byte[] buffer,int count)
{
_stream.Write(buffer,count);
}
public override void Write(ReadOnlySpan<byte> buffer)
{
_stream.Write(buffer);
}
public override Task WriteAsync(byte[] buffer,CancellationToken cancellationToken) => _stream.WriteAsync(buffer,cancellationToken);
public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer,CancellationToken cancellationToken = new CancellationToken()) => _stream.WriteAsync(buffer,cancellationToken);
public override void WriteByte(byte value)
{
_stream.WriteByte(value);
}
public override bool CanRead => _stream.CanRead;
public override bool CanSeek => _stream.CanSeek;
public override bool CanTimeout => _stream.CanTimeout;
public override bool CanWrite => _stream.CanWrite;
public override long Length => _stream.Length;
public override long Position
{
get => _stream.Position;
set => _stream.Position = value;
}
public override int ReadTimeout
{
get => _stream.ReadTimeout;
set => _stream.ReadTimeout = value;
}
public override int WriteTimeout
{
get => _stream.WriteTimeout;
set => _stream.WriteTimeout = value;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。