Skip to content

Commit

Permalink
✨ improve BufferStream
Browse files Browse the repository at this point in the history
  • Loading branch information
XiYang6666 committed Apr 26, 2024
1 parent f4d66bd commit 70bc910
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions src/bufferStream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,47 +16,59 @@ export abstract class BaseBufferStream {
}

export class BufferInputStream extends BaseBufferStream {
bytesRead: number = 0;
read(length: number): Buffer {
const value = this.innerBuffer.subarray(0, length);
this.innerBuffer = this.innerBuffer.subarray(length);
const value = this.innerBuffer.subarray(this.bytesRead, this.bytesRead + length);
this.bytesRead += length;
return value;
}

get<T>(type: DataType<T>): T {
const [value, offset] = type.read(this.innerBuffer, 0);
this.innerBuffer = this.innerBuffer.subarray(offset);
const [value, offset] = type.read(this.innerBuffer, this.bytesRead);
this.bytesRead += offset;
return value;
}
}

export class BufferOutputStream extends BaseBufferStream {
bytesWrite: number = 0;
write(buffer: Buffer) {
this.bytesWrite += buffer.length;
this.innerBuffer = Buffer.concat([this.innerBuffer, buffer]);
}

put<T>(type: DataType<T>, value: T): void {
this.innerBuffer = Buffer.concat([this.innerBuffer, type.write(value)]);
const valueBuffer = type.write(value);
this.bytesWrite == valueBuffer.length;
this.innerBuffer = Buffer.concat([this.innerBuffer, valueBuffer]);
}
}

export class BufferStream extends BaseBufferStream implements BufferInputStream, BufferOutputStream {
bytesRead: number = 0;
bytesWrite: number = 0;
read(length: number): Buffer {
const value = this.innerBuffer.subarray(0, length);
this.bytesRead += length;
this.innerBuffer = this.innerBuffer.subarray(length);
return value;
}

get<T>(type: DataType<T>): T {
const [value, offset] = type.read(this.innerBuffer, 0);
this.bytesRead == offset;
this.innerBuffer = this.innerBuffer.subarray(offset);
return value;
}

write(buffer: Buffer) {
this.bytesWrite += buffer.length;
this.innerBuffer = Buffer.concat([this.innerBuffer, buffer]);
}

put<T>(type: DataType<T>, value: T): void {
this.innerBuffer = Buffer.concat([this.innerBuffer, type.write(value)]);
const valueBuffer = type.write(value);
this.bytesWrite += valueBuffer.length;
this.innerBuffer = Buffer.concat([this.innerBuffer, valueBuffer]);
}
}

0 comments on commit 70bc910

Please sign in to comment.