Package Exports
- bserializer
- bserializer/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (bserializer) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Data Serializer
A TypeScript-based serialization/deserialization library built for exploration and learning.
Features
- Supports common data types:
string,number,boolean,null,undefined,object,array, and custom handling for fixed-point decimals. - Compression-ready: Built-in zlib integration for file I/O.
- Type-safe: Written in TypeScript with explicit type codes.
Installation
npm install bserializerRequires Node.js v18+.
Usage
Serialize & Deserialize Data
import { serializeData, deserializeData } from "bserializer";
const data = { foo: [42, "bar", true], baz: null };
const serialized = serializeData(data);
const deserialized = deserializeData(serialized); // { foo: [42, "bar", true], baz: null }File I/O with Compression
import { writeToFile, readFromFile } from "bserializer";
// Write
writeToFile("data.bin", { planets: ["🌍", "🚀", 3.1415] });
// Read
const loadedData = readFromFile("data.bin"); // { planets: ["🌍", "🚀", 3.1415] }Benchmark
Mixed Array 100000 entries
| Serialize Time | Size | Compressed Size | Deserialize Time | Heap Used | Heap Total | |
|---|---|---|---|---|---|---|
| JSON | 94.04 ms | 14.59 MB | 1.58 MB | 112.15 ms | 94.13 MB | 124.13 MB |
| Custom | 612.77 ms | 17.70 MB | 1.58 MB | 335.87 ms | 108.61 MB | 142.39 MB |
| BSON | 797.34 ms | 15.76 MB | 1.64 MB | 595.68 ms | 166.28 MB | 190.45 MB |
| MsgPack | 306.57 ms | 10.12 MB | 1.35 MB | 323.97 ms | 200.08 MB | 231.47 MB |
Flat Numbers 100000 entries
| Serialize Time | Size | Compressed Size | Deserialize Time | Heap Used | Heap Total | |
|---|---|---|---|---|---|---|
| JSON | 2.03 ms | 0.56 MB | 0.20 MB | 2.19 ms | 203.71 MB | 233.63 MB |
| Custom | 8.75 ms | 0.86 MB | 0.12 MB | 3.41 ms | 208.68 MB | 235.93 MB |
| BSON | 44.46 ms | 1.04 MB | 0.28 MB | 4.49 ms | 213.66 MB | 238.24 MB |
| MsgPack | 19.48 ms | 0.35 MB | 0.20 MB | 11.17 ms | 218.25 MB | 239.01 MB |
Empy Nested Object Depth 50 100000 entries
| Serialize Time | Size | Compressed Size | Deserialize Time | Heap Used | Heap Total | |
|---|---|---|---|---|---|---|
| JSON | 581.69 ms | 47.02 MB | 0.21 MB | 842.08 ms | 294.89 MB | 330.49 MB |
| Custom | 4186.99 ms | 66.28 MB | 0.32 MB | 1073.71 ms | 365.73 MB | 389.75 MB |
| BSON | ERROR | ERROR | ERROR | ERROR | ERROR | ERROR |
| MsgPack | 3557.09 ms | 32.52 MB | 0.14 MB | 4098.36 ms | 365.95 MB | 399.46 MB |
How It Works
Serialization Rules
- Numbers: Stored as
doubleby default. Fixed-point decimals (e.g.,3.14) are scaled to integers for precision. - Strings/Keys: UTF-8 encoded with 1-byte length headers.
- Objects: Stored as
[count][key-value pairs]. - Special Types:
undefinedandnullhave dedicated type codes.
Compression
Uses zlib.gzipSync for file writes and zlib.gunzipSync for reads.
License
ISC.