Class Buffer
Accessors
capacity
- get capacity(): number
The read only capacity of the buffer's underlying byte slice, that is, the total space allocated for the buffer's data.
Returns number
The number of allocated bytes for the buffer.
length
- get length(): number
A read only number of bytes of the unread portion of the buffer.
Returns number
The number of bytes in the unread portion of the buffer.
Example: Basic usage
import { assertEquals } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([0, 1, 2]);
const buf = new Buffer(array.buffer);
assertEquals(buf.length, 3);Example: Length becomes 0 after the content is read
import { assertEquals } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([42]);
const buf = new Buffer(array.buffer);
assertEquals(buf.length, 1);
// Read the content out of the buffer
await buf.readable.pipeTo(Deno.stdout.writable);
// The length is now 0
assertEquals(buf.length, 0);
readable
- get readable(): ReadableStream<Uint8Array>
Getter returning the instance's ReadableStream.
Returns ReadableStream<Uint8Array>
A
ReadableStreamof the buffer.
writable
- get writable(): WritableStream<Uint8Array>
Getter returning the instance's WritableStream.
Returns WritableStream<Uint8Array>
A
WritableStreamof the buffer.
Methods
bytes
- bytes(options?): Uint8Array
Returns a slice holding the unread portion of the buffer.
The slice is valid for use only until the next buffer modification (that is, only until the next call to a method that mutates or consumes the buffer, like reading data out via
readable,reset(), ortruncate()).If
options.copyis false the slice aliases the buffer content at least until the next buffer modification, so immediate changes to the slice will affect the result of future reads. Ifoptionsis not provided,options.copydefaults totrue.Parameters
- options: BufferBytesOptions = ...
Options for the bytes method.
Returns Uint8Array
A copy or a slice of the buffer.
Example: Copy the buffer
import { assertEquals } from "@std/assert";
import { assertNotEquals } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([0, 1, 2]);
const buf = new Buffer(array.buffer);
const copied = buf.bytes();
assertEquals(copied.length, array.length);
// Modify an element in the original array
array[1] = 99;
assertEquals(copied[0], array[0]);
// The copied buffer is not affected by the modification
assertNotEquals(copied[1], array[1]);
assertEquals(copied[2], array[2]);Example: Get a slice to the buffer
import { assertEquals } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([0, 1, 2]);
const buf = new Buffer(array.buffer);
const slice = buf.bytes({ copy: false });
assertEquals(slice.length, array.length);
// Modify an element in the original array
array[1] = 99;
assertEquals(slice[0], array[0]);
// The slice _is_ affected by the modification
assertEquals(slice[1], array[1]);
assertEquals(slice[2], array[2]);- options: BufferBytesOptions = ...
empty
- empty(): boolean
Returns whether the unread portion of the buffer is empty.
Returns boolean
Whether the buffer is empty.
Example: Empty buffer
import { assert } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const buf = new Buffer();
assert(buf.empty());Example: Non-empty buffer
import { assert } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([42]);
const buf = new Buffer(array.buffer);
assert(!buf.empty());Example: Non-empty, but the content was already read
import { assert } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([42]);
const buf = new Buffer(array.buffer);
assert(!buf.empty());
// Read the content out of the buffer
await buf.readable.pipeTo(Deno.stdout.writable);
// The buffer is now empty
assert(buf.empty());
grow
- grow(n): void
Grows the buffer's capacity, if necessary, to guarantee space for another
nbytes. After.grow(n), at leastnbytes can be written to the buffer without another allocation. Ifnis negative,.grow()will throw. If the buffer can't grow it will throw an error.Parameters
- n: number
The number of bytes to grow the buffer by.
Based on Go Lang's Buffer.Grow.
Returns void
- n: number
reset
truncate
- truncate(n): void
Discards all but the first
nunread bytes from the buffer but continues to use the same allocated storage. It throws ifnis negative or greater than the length of the buffer.Parameters
- n: number
The number of bytes to keep.
Returns void
Example: Basic usage
import { assertEquals } from "@std/assert";
import { Buffer } from "@std/streams/buffer";
const array = new Uint8Array([0, 1, 2]);
const buf = new Buffer(array.buffer);
assertEquals(buf.bytes(), array);
// Discard all but the first 2 bytes
buf.truncate(2);
assertEquals(buf.bytes(), array.slice(0, 2));- n: number
A variable-sized buffer of bytes with
readableandwritablegetters that allows you to work with Web Streams API.Buffer is almost always used with some I/O like files and sockets. It allows one to buffer up a download from a socket. Buffer grows and shrinks as necessary.
Buffer is NOT the same thing as Node's Buffer. Node's Buffer was created in 2009 before JavaScript had the concept of ArrayBuffers. It's simply a non-standard ArrayBuffer.
ArrayBuffer is a fixed memory allocation. Buffer is implemented on top of ArrayBuffer.
Based on Go Buffer.
Example: Buffer input bytes and convert it to a string