diff --git a/src/Reader.ts b/src/Reader.ts index 697a524..e7cbbe1 100644 --- a/src/Reader.ts +++ b/src/Reader.ts @@ -45,6 +45,13 @@ export class Reader implements IReader, IReaderResettable { return bin; } + public subarray(start: number = 0, end?: number): Uint8Array { + const x = this.x; + const actualStart = x + start; + const actualEnd = typeof end === 'number' ? x + end : this.end; + return this.uint8.subarray(actualStart, actualEnd); + } + /** * Creates a new {@link Reader} that references the same underlying memory * buffer. But with independent cursor and end. diff --git a/src/StreamingReader.ts b/src/StreamingReader.ts index 28292e3..a64a39e 100644 --- a/src/StreamingReader.ts +++ b/src/StreamingReader.ts @@ -95,6 +95,13 @@ export class StreamingReader implements IReader, IReaderResettable { return bin; } + public subarray(start: number = 0, end?: number): Uint8Array { + const x = this.x; + const actualStart = x + start; + const actualEnd = typeof end === 'number' ? x + end : this.size() + x - start; + return this.uint8.subarray(actualStart, actualEnd); + } + /** * Creates a new {@link Reader} that references the same underlying memory * buffer. But with independent cursor and end. diff --git a/src/types.ts b/src/types.ts index d891134..3ae3713 100644 --- a/src/types.ts +++ b/src/types.ts @@ -91,6 +91,8 @@ export interface IReaderBase { */ cut(size?: number): IReaderBase; + subarray(start?: number, end?: number): Uint8Array; + /** Get current byte value without advancing the cursor. */ peek(): number;