# readFully method

Future<Uint8List> readFully(

1. int length

)

Reads exactly `length` bytes from the input stream.

This method repeatedly calls read until exactly `length` bytes have been read or the end of stream is reached. If the end of stream is reached before `length` bytes are read, an EndOfStreamException is thrown.

## Parameters

- `length`: The exact number of bytes to read

## Returns

A Uint8List containing exactly `length` bytes.

## Example

    final input = FileInputStream('data.bin');
    try {
      // Read exactly 1024 bytes
      final data = await input.readFully(1024);
      print('Read exactly ${data.length} bytes');
      processData(data);
    } catch (EndOfStreamException e) {
      print('File was shorter than expected');
    } finally {
      await input.close();
    }

Throws EndOfStreamException if the end of stream is reached before `length` bytes are read. Throws IOException if an I/O error occurs. Throws StreamClosedException if the stream has been closed.

## Implementation

    Future<Uint8List> readFully(int length) async {
      checkClosed();

      final buffer = Uint8List(length);
      int totalRead = 0;

      while (totalRead < length) {
        final bytesRead = await read(buffer, totalRead, length - totalRead);
        if (bytesRead == -1) {
          throw EndOfStreamException('Expected $length bytes but only $totalRead available');
        }
        totalRead += bytesRead;
      }

      return buffer;
    }