Binn (Serialization format)

Binn
Development status Active
Operating system Any
Platform Cross-platform
Type Data interchange
License Apache 2.0
Website github.com/liteserver/binn

Binn is a computer data serialization format used mainly for application data transfer. It stores primitive data types and data structures in a binary form.[1]

Performance

The Binn format is designed to be compact and fast on readings. The elements are stored with their sizes to increase the read performance. The strings are null terminated so when read the library returns a pointer to them inside the buffer, avoiding memory allocation and data copying, an operation known as zero-copy.

Data types

Primitive data types:

Containers:

Format

Binn structures consist of a list of elements. Each element has a type that can be followed by the size, count of internal items, and the data itself:

boolean, null:
[type]

int, float (storage: byte, word, dword or qword):
[type][data]

string, blob:
[type][size][data]

list, object, map:
[type][size][count][data]

Example encoding

A JSON data such as {"hello":"world"} is serialized in binn with the same size:

  \xE2                               // type = object (container)
  \x11                               // container total size
  \x01                               // items in the container (key/value pairs in this case)
  \x05hello                          // field name
  \xA0                               // type = string
  \x05world\x00                      // field value (null terminated)

Example code

Writing to an object in C:

  binn *obj;

  // create a new object
  obj = binn_object();

  // add values to it
  binn_object_set_int32(obj, "id", 123);
  binn_object_set_str(obj, "name", "John");
  binn_object_set_double(obj, "total", 2.55);

  // send over the network or save to a file...
  send(sock, binn_ptr(obj), binn_size(obj));

  // release the buffer
  binn_free(obj);

Reading from that object:

  int id;
  char *name;
  double total;

  id = binn_object_int32(obj, "id");
  name = binn_object_str(obj, "name");
  total = binn_object_double(obj, "total");

See also

References

External links

This article is issued from Wikipedia - version of the 6/17/2016. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.