Package Exports
- binarytf
- binarytf/dist/lib/errors/DeserializerError
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 (binarytf) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
binarytf 
About
Binary Term Format
is a term format inspired in ETF with more types and circular reference serialization and deserialization.
This term format is designed to fix one of ETF's flaws: byte size.
Serializing this object:
{ "test": ["hello", "world"], "more": { "nested": "objects", "do": ["you", "like", "it?"] } }
Takes 80
bytes as JSON.stringify()
'd, 116
bytes as ETF
using devsnek/earl
, and just 71
bytes in BTF
.
The extreme compression is achieved by delimiting the bytes using a technique similar to null delimited strings. Allowing every string, array, set, map, and object, to trim the byte size by 3 (4 bytes for length/size -> 1 byte to delimit the field). TypedArrays do not get this feature, since they have a type for all elements instead of a type for each element, [0]
works because it is encoded as ArrayType
+ NumberByteLiteralType
+ 0x00
+ NullDelimiter
, but this technique would not work in Uint8Array[0]
(Uint8ArrayType
+ 0x00 + 0x00 + 0x00 + 0x01
+ 0x00
).
And this is also achieved by using special types for empty collections, [null]
takes 3 bytes (ArrayType
+ NullType
+ NullDelimiter
), but []
takes a single byte (EmptyArrayType
). This also applies to empty objects, sets, and maps.
Usage
This module is plug-and-play, it exposes two functions, serialize
and deserialize
, and would be used in the following way:
const { serialize, deserialize } = require('binarytf');
const serialized = serialize({ hello: 'world' });
const deserialized = deserialize(serialized);
console.log(deserialized); // { hello: 'world' }
Credit
binarytf
is heavily based on devsnek/earl
, this module wouldn't be possible without it's author:
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request!
Author
binarytf © kyranet, released under the MIT License. Authored and maintained by kyranet.