Binary Serialization
Binnは、コンパクトで高速で使いやすいバイナリデータシリアル化フォーマットです。
要素は、読み取りパフォーマンスを向上させるために、サイズとともに格納されます。
ライブラリは、文字列、BLOB、およびコンテナを読み取るときにゼロコピーを使用します。
文字列はヌル終端されているため、ライブラリが読み取るときにバッファ内のポインタが返され、メモリ割り当てとデータコピーが回避されます。
Binnフォーマットは、以下のすべてをサポートしています。
プリミティブデータタイプ:
true
およびfalse
)コンテナ:
要素は次のように格納されます。
ブール値、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フォルダで、より多くの使用例を見つけることができます。
お気に入りの言語でラッパーを作成してください。その後、ここにリストアップするためにお知らせください。
gcc myapp.c -lbinn
MSVCプロジェクトにbinn-3.0.lib
を含めるか、MinGWを使用してください。
gcc myapp.c -lbinn-3.0
git clone https://github.com/liteserver/binn
cd binn
make
sudo make install
Linuxではlibbinn.so.3.0
ファイル、MacOSXではlibbinn.3.dylib
ファイルが作成されます。
src/win32フォルダにあるVisual Studioプロジェクトを使用するか、MinGWを使用してコンパイルしてください。
git clone https://github.com/liteserver/binn
cd binn
make
どちらもbinn-3.0.dll
ファイルが作成されます。
静的ライブラリを生成するには:
make static
libbinn.a
ファイルが作成されます。
android-binn-nativeプロジェクトで事前にコンパイルされたバイナリを確認してください。
cd binn
make test
test/win32フォルダにあるプロジェクトを使用してください。
現在のバージョン(3.0)は安定しており、本番環境で使用する準備が整っています。
クロスプラットフォームであるため、リトルエンディアンとビッグエンディアンのデバイス間でデータを転送できます。
Apache 2.0
質問、提案、サポート:contact AT litereplica DOT io