ByteArrayInputStream.fromRange constructor

ByteArrayInputStream.fromRange(
  1. Uint8List buffer,
  2. int offset,
  3. int length
)

A byte-based input stream that reads from a Uint8List buffer.

ByteArrayInputStream provides a non-blocking, in-memory implementation of the InputStream interface over a Dart Uint8List. It's particularly useful for:

  • Testing input-based logic without relying on external files or sockets.
  • Wrapping encoded or serialized in-memory data for streaming processing.
  • Implementing low-latency input pipelines (e.g., compression, decryption).

Unlike traditional Streams in Dart, this class offers fine-grained control over the byte cursor, with support for methods like mark() and reset() if implemented in the extended InputStream class.


🔧 Example:

final bytes = Uint8List.fromList([104, 101, 108, 108, 111]); // "hello"
final inputStream = ByteArrayInputStream(bytes);

final char1 = inputStream.read(); // 104 (h)
final char2 = inputStream.read(); // 101 (e)

✅ Use Cases:

  • Parsing binary data from a known byte array.
  • Emulating I/O in memory-constrained or test environments.
  • Providing a readable wrapper for encoded API payloads.

Creates a ByteArrayInputStream that reads from a slice of the buffer starting at offset and spanning length bytes.

This is useful when you want to expose only a portion of a larger buffer as an input stream.

Throws a RangeError if the slice is out of bounds.

Implementation

ByteArrayInputStream.fromRange(Uint8List buffer, int offset, int length)
    : _buffer = buffer.sublist(offset, offset + length);