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>;- Получение заполненной части буфера в видеUint8Arrayget 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еслиfalsereadBoolean(): boolean;- Чтение булева значения
writeDate(val: Date): void;- Запись датыreadDate(): Date;- Чтение даты