Skip to content

Advanced Bint Usage

Learn advanced binary serialization patterns, optimization techniques, and large-scale data handling.

Custom Type Management

Understand and optimize type selection:

ts
import bint from "@briklab/net-t";

// Types are automatically selected
const instance = bint();

// Check what type each value uses
instance(42);          // Uint8 (1 byte)
instance(256);         // Uint16 (2 bytes)
instance(70000);       // Uint32 (4 bytes)
instance(3.14159);     // Float32 or Float64
instance(9007199254740992n); // BigInt64 (8 bytes)

console.log(`Stored ${instance.length} values`);
console.log(`Total size: ${instance.toBuffer().byteLength} bytes`);

Batch Item Processing

Process large datasets efficiently:

ts
import bint from "@briklab/net-t";

class DataProcessor {
  processBatch(numbers: number[]): ArrayBuffer {
    const instance = bint();

    numbers.forEach(num => instance(num));

    return instance.toBuffer();
  }

  deserializeBatch(buffer: ArrayBuffer): void {
    const instance = bint.fromBuffer(buffer);

    for (const value of instance) {
      console.log(value);
    }
  }
}

const processor = new DataProcessor();
const data = [1, 255, 256, 70000, 3.14];
const buffer = processor.processBatch(data);
console.log(`Serialized ${buffer.byteLength} bytes`);

Live Demo - Binary Serialization

Console
No logs yet.

Real-time Data Stream

Stream data over network with minimal overhead:

ts
import bint from "@briklab/net-t";

class DataStream {
  // Simulated WebSocket send
  sendToRemote(numbers: number[]): void {
    const instance = bint();
    numbers.forEach(num => instance(num));

    const buffer = instance.toBuffer();
    console.log(`Sending ${buffer.byteLength} bytes over network`);
    // websocket.send(buffer);
  }

  // Simulated WebSocket receive
  receiveFromRemote(buffer: ArrayBuffer): void {
    const instance = bint.fromBuffer(buffer);
    console.log(`Received ${instance.length} values`);

    for (const value of instance) {
      console.log(`Processed: ${value}`);
    }
  }
}

const stream = new DataStream();
stream.sendToRemote([100, 200, 300, 3.14]);

Time Series Data

Store time series data efficiently:

ts
import bint from "@briklab/net-t";

class TimeSeriesDB {
  private instance = bint();

  recordMetric(timestamp: number, value: number): void {
    // Alternate: timestamp, value
    this.instance(timestamp);
    this.instance(value);
  }

  export(): ArrayBuffer {
    return this.instance.toBuffer();
  }

  import(buffer: ArrayBuffer): Array<[number, number]> {
    const data = bint.fromBuffer(buffer);
    const timeSeries: Array<[number, number]> = [];

    for (let i = 0; i < data.length; i += 2) {
      timeSeries.push([data[i] as number, data[i + 1] as number]);
    }

    return timeSeries;
  }
}

const db = new TimeSeriesDB();
db.recordMetric(1609459200, 95.5);
db.recordMetric(1609459260, 96.2);
const exported = db.export();

Audio Sample Storage

Store audio samples with minimal space:

ts
import bint from "@briklab/net-t";

class AudioBuffer {
  private instance = bint();

  // Store normalized audio samples (-1 to 1 range)
  addSamples(samples: number[]): void {
    // Map -1...1 to 0...255 range for efficient storage
    samples.forEach(sample => {
      const normalized = Math.round((sample + 1) * 127.5);
      this.instance(normalized);
    });
  }

  export(): ArrayBuffer {
    return this.instance.toBuffer();
  }

  import(buffer: ArrayBuffer): number[] {
    const data = bint.fromBuffer(buffer);
    const samples: number[] = [];

    for (const value of data) {
      // Map 0...255 back to -1...1 range
      const sample = ((value as number) / 127.5) - 1;
      samples.push(sample);
    }

    return samples;
  }
}

const audio = new AudioBuffer();
audio.addSamples([0.5, -0.3, 0.8, -0.1]);

Next Steps