Binary Serialization

454
58
C

Binn

Build Status
Tests
Stable

English | 中文 | Русский

Binnは、コンパクト高速使いやすいバイナリデータシリアル化フォーマットです。

パフォーマンス

要素は、読み取りパフォーマンスを向上させるために、サイズとともに格納されます。

ライブラリは、文字列、BLOB、およびコンテナを読み取るときにゼロコピーを使用します。

文字列はヌル終端されているため、ライブラリが読み取るときにバッファ内のポインタが返され、メモリ割り当てとデータコピーが回避されます。

データタイプ

Binnフォーマットは、以下のすべてをサポートしています。

プリミティブデータタイプ:

  • null
  • ブーリアン(trueおよびfalse
  • 整数(最大64ビット、符号付きまたは符号なし)
  • 浮動小数点数(IEEE単精度および倍精度)
  • 文字列
  • BLOB(バイナリデータ)
  • ユーザー定義

コンテナ:

  • リスト
  • マップ(数値キー連想配列)
  • オブジェクト(テキストキー連想配列)

フォーマット

要素は次のように格納されます。

ブール値、null:
[type]

int、float(ストレージ:バイト、ワード、DWORD、またはQWORD):
[type][data]

文字列、BLOB:
[type][size][data]

リスト、オブジェクト、マップ:
[type][size][count][data]

例の構造

JSONデータ(例:{“hello”:“world”})は、Binnで次のようにシリアル化されます。

  \xE2           // type = object (container)
  \x11           // container total size
  \x01           // key/value pairs count
  \x05hello      // key
  \xA0           // type = string
  \x05world\x00  // value (null terminated)

完全な仕様を確認できます。

使用例

書き込み

binn *obj;

// 新しいオブジェクトを作成
obj = binn_object();

// 値を追加
binn_object_set_int32(obj, "id", 123);
binn_object_set_str(obj, "name", "John");
binn_object_set_double(obj, "total", 2.55);

// ネットワーク経由で送信するか、ファイルに保存する...
send(sock, binn_ptr(obj), binn_size(obj));

// バッファを解放
binn_free(obj);

読み取り

int id;
char *name;
double total;

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

その他の例

こちらexamplesフォルダで、より多くの使用例を見つけることができます。

その他の実装

お気に入りの言語でラッパーを作成してください。その後、ここにリストアップするためにお知らせください。

使い方

  1. プロジェクトにbinn.cファイルを含めるか、または
  2. プロジェクトに静的ライブラリを含めるか、または
  3. binnライブラリにリンクする:

LinuxおよびMacOSXでの場合:

gcc myapp.c -lbinn

Windowsでの場合:

MSVCプロジェクトにbinn-3.0.libを含めるか、MinGWを使用してください。

gcc myapp.c -lbinn-3.0

ライブラリのコンパイル

LinuxおよびMacOSXでの場合:

git clone https://github.com/liteserver/binn
cd binn
make
sudo make install

Linuxではlibbinn.so.3.0ファイル、MacOSXではlibbinn.3.dylibファイルが作成されます。

Windowsでの場合:

src/win32フォルダにあるVisual Studioプロジェクトを使用するか、MinGWを使用してコンパイルしてください。

git clone https://github.com/liteserver/binn
cd binn
make

どちらもbinn-3.0.dllファイルが作成されます。

静的ライブラリ

静的ライブラリを生成するには:

make static

libbinn.aファイルが作成されます。

Androidでの場合:

android-binn-nativeプロジェクトで事前にコンパイルされたバイナリを確認してください。

回帰テスト

Linux、MacOSX、およびWindows(MinGW)での場合:

cd binn
make test

Windows(Visual Studio)での場合:

test/win32フォルダにあるプロジェクトを使用してください。

信頼性

現在のバージョン(3.0)は安定しており、本番環境で使用する準備が整っています。

クロスプラットフォームであるため、リトルエンディアンとビッグエンディアンのデバイス間でデータを転送できます。

ライセンス

Apache 2.0

連絡先

質問、提案、サポート:contact AT litereplica DOT io