read method

  1. @override
Future<Uint8List> read([
  1. int? maxLength
])
override

Reads data from the stream

Implementation

@override
Future<Uint8List> read([int? maxLength]) async {
  while (true) {
    if (_reset != null) throw _reset!;
    if (_readQueue.isNotEmpty) return _take(maxLength);
    if (_remoteFin || _localReadClosed || _channelClosed) return Uint8List(0);
    final readable = _readable ??= Completer<void>();
    final deadline = _readDeadline;
    if (deadline == null) {
      await readable.future;
    } else {
      final remaining = deadline.difference(DateTime.now());
      if (remaining <= Duration.zero) throw TimeoutException('read deadline exceeded');
      await readable.future.timeout(remaining, onTimeout: () {
        throw TimeoutException('read deadline exceeded');
      });
    }
  }
}