DataBuffer
Класс DataBuffer
представляет собой обертку над DateView
с дополнительным функционалом по отслеживанию курсора, автоматическому расширению буфера и другого.
Tip
DataBuffer
автоматически изменяет положение курсора при записи и чтении. На практике, при создании пользовательских типов, вам не нужно думать об этом.
Использование
import { DataBuffer } from "encodexx"
const buf = new DataBuffer()
buf.writeFloat64(12.4325);
buf.resetCursor();
console.log(buf.readFloat64());
Danger
Не используйте resetCursor
в экземплярах DataBuffer
, которые вы получаете создавая, пользовательские типы. Это может привести к ошибкам в сериализации и перезаписи данных.
Применение
Encodexx
возвращает DataBuffer
в качестве буфера для сериализации и десериализации данных. Вы можете также использовать его для создания пользовательских типов, которые будут работать с буфером напрямую.
Создание DataBuffer из ArrayBuffer
Вы можете передать в конструктор класса ArrayBuffer
.
import { DataBuffer } from "encodexx"import { serializer } from "./schema.ts"
const arrayBuffer = new ArrayBuffer(200)// Do something with arrayBufferconst buffer = new DataBuffer(arrayBuffer)
Отправка DataBuffer по сети
Для того, чтобы отправить DataBuffer
по сети, вам необходимо его конвертировать в ArrayBuffer
или Uint8Array
.
import { serializer } from "./schema.ts"const body = serializer.encode(data).buffer; // Получаем ArrayBuffer
fetch(url, { method: "POST", body, headers: { // Указываем, что отправляем бинарные данные "Content-Type": "application/octet-stream", },})
Для того, чтобы отправить данные с сервера, к примеру использующего express, необхоидмо использовать встроенный в NodeJs
класс Buffer
import { serializer, getResponse } from "./schema.ts"
app.post("/", (req, res) => { const response = getResponse();
// Получаем результат в Uint8Array и конвертируем в Buffer const encoded = Buffer.from(serializer.encode(response).uint8Array);
res.set("Content-Type", "application/octet-stream"); res.send(encoded);});
API
constructor(newBuffer?: ArrayBuffer, size?: number)
- Конструктор нового экземпляра. Можно указать начальный буфер или начальный размер
По умолчанию DataBuffer
сразу выделяет 1 Кб после увеличивая размер при необходимости. Вы можете изменить этот размер
new DataBuffer(undefined, 1024 * 1024) // Выделяем сразу 1 Мб
Info
Еncodexx автоматически обрезает буфер до нужного размера
get length(): number;
- Получение длины заполненной части буфераget buffer(): ArrayBuffer;
- Получение заполненной части буфераget uint8Array(): Uint8Array<ArrayBuffer>;
- Получение заполненной части буфера в видеUint8Array
get cursor(): number;
- Получение байта на котором стоит курсорresetCursor(): void;
- Устанавливает курсор в 0 позицию
writeBuffer(buffer: ArrayBuffer | Uint8Array): void;
- Запись ArrayBuffer произвольной длиныreadBuffer(length: number): ArrayBuffer;
- Чтение ArrayBuffer определенной длины
writeUleb128(value: bigint): void;
- Запись числа в формате uleb128readUleb128(): bigint;
- Чтение числа в формате uleb128
writeSleb128(value: bigint): void;
- Запись числа в формате sleb128readSleb128(): bigint;
- Чтение числа в формате sleb128
writeInt8(val: number): void;
- Запись числа в формате int8readInt8(): number;
- Чтение числа в формате int8
writeUint8(val: number): void;
- Запись числа в формате uint8readUint8(): number;
- Чтение числа в формате uint8
writeInt16(val: number): void;
- Запись числа в формате int16readInt16(): number;
- Чтение числа в формате int16
writeUint16(val: number): void;
- Запись числа в формате uint16readUint16(): number;
- Чтение числа в формате uint16
writeInt32(val: number): void;
- Запись числа в формате int32readInt32(): number;
- Чтение числа в формате int32
writeUint32(val: number): void;
- Запись числа в формате uint32readUint32(): number;
- Чтение числа в формате uint32
writeFloat32(val: number): void;
- Запись числа в формате float32readFloat32(): number;
- Чтение числа в формате float32
writeFloat64(val: number): void;
- Запись числа в формате float64readFloat64(): number;
- Чтение числа в формате float64
writeBigInt64(val: bigint): void;
- Запись числа в формате bigint64readBigInt64(): bigint;
- Чтение числа в формате bigint64
writeBigUint64(val: bigint): void;
- Запись числа в формате biguint64readBigUint64(): bigint;
- Чтение числа в формате biguint64
writeString(val: string): void;
- Запись строкиreadString(): string;
- Чтение строки
writeBoolean(val: boolean): void;
- Запись булева значенияFF
еслиtrue
и00
еслиfalse
readBoolean(): boolean;
- Чтение булева значения
writeDate(val: Date): void;
- Запись датыreadDate(): Date;
- Чтение даты