ByteStream异步字节访问
节省内存消耗。
    /// <summary>
    /// 字节流,包装流以实现高效的异步字节访问
    /// </summary>
    public sealed class ByteStream : IDisposable
    {
        private readonly Stream _stream;
        private readonly byte[] _buffer;
        private int _position;
        private int _bufferedBytes;
        public ByteStream(Stream stream)
        {
            _stream = stream;
            _buffer = new byte[1024 * 8];
        }
        public async ValueTask<byte?> ReadByteAsync()
        {
            if (_position == _bufferedBytes)
            {
                _position = 0;
                _bufferedBytes = await _stream.ReadAsync(_buffer, 0, _buffer.Length).ConfigureAwait(false);
                if (_bufferedBytes == 0)    // 流读取结束
                {
                    return null;
                }
            }
            return _buffer[_position++];
        }
        public void Dispose()
        {
            _stream.Dispose();
        }
    }
---------------------------------------------------------------------------------
    byte? val = null;
    using (var stream = new ByteStream(File.OpenRead("E:\\bigFile.txt")))
    {
        while ((val = await stream.ReadByteAsync()).HasValue)
        {
            ConsumeByte(val.Value);
        }
    }
应用场景
- a)在API中只用await;
- b)在API中避免相关的分配开销是重要的;
- c)同步完成是通用情况,能够有效的将对象池用于异步完成。

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号