Header only C++ binary serialization library. It is designed around the networking requirements for real-time data delivery, especially for games.
All cross-platform requirements are enforced at compile time, so serialized data do not store any meta-data information and is as small as possible.
bitsery is looking for your feedback on gitter
Look at the numbers and features list, and decide yourself.
| library | data size | ser time | des time |
|---|---|---|---|
| bitsery | 6913B | 1119ms | 1166ms |
| boost | 11037B | 15391ms | 12912ms |
| cereal | 10413B | 10518ms | 10245ms |
| flatbuffers | 14924B | 9075ms | 3701ms |
| msgpack | 8857B | 3340ms | 13842ms |
| protobuf | 10018B | 21229ms | 22077ms |
| yas | 10463B | 2107ms | 1554ms |
benchmarked on Ubuntu with GCC 10.3.0, more details can be found here
If still not convinced read more in library motivation section.
#include <bitsery/bitsery.h>
#include <bitsery/adapter/buffer.h>
#include <bitsery/traits/vector.h>
enum class MyEnum:uint16_t { V1,V2,V3 };
struct MyStruct {
uint32_t i;
MyEnum e;
std::vector<float> fs;
};
template <typename S>
void serialize(S& s, MyStruct& o) {
s.value4b(o.i);
s.value2b(o.e);
s.container4b(o.fs, 10);
}
using Buffer = std::vector<uint8_t>;
using OutputAdapter = bitsery::OutputBufferAdapter<Buffer>;
using InputAdapter = bitsery::InputBufferAdapter<Buffer>;
int main() {
MyStruct data{8941, MyEnum::V2, {15.0f, -8.5f, 0.045f}};
MyStruct res{};
Buffer buffer;
auto writtenSize = bitsery::quickSerialization<OutputAdapter>(buffer, data);
auto state = bitsery::quickDeserialization<InputAdapter>({buffer.begin(), writtenSize}, res);
assert(state.first == bitsery::ReaderError::NoError && state.second);
assert(data.fs == res.fs && data.i == res.i && data.e == res.e);
}
For more details go directly to quick start tutorial.
This documentation comprises these parts:
documentation is in progress, most parts are empty, but contributions are welcome.
Works with C++11 compiler, no additional dependencies, include <bitsery/bitsery.h> and you're done.
some bitsery extensions might require higher C++ standard (e.g.
StdVariant)
Library is tested on all major compilers on Windows, Linux and macOS.
bitsery is licensed under the MIT license.
If you find this project useful or interesting, or just want to say thanks, you can buy me a coffee! Your support keeps me motivated to maintaining and improving this project.
53 followers · starred Dec 2020
135 followers · starred Aug 2024
46 followers · starred Oct 2017
1,281 followers · starred Jan 2023
Header only C++ binary serialization library. It is designed around the networking requirements for real-time data delivery, especially for games.
All cross-platform requirements are enforced at compile time, so serialized data do not store any meta-data information and is as small as possible.
bitsery is looking for your feedback on gitter
Look at the numbers and features list, and decide yourself.
| library | data size | ser time | des time |
|---|---|---|---|
| bitsery | 6913B | 1119ms | 1166ms |
| boost | 11037B | 15391ms | 12912ms |
| cereal | 10413B | 10518ms | 10245ms |
| flatbuffers | 14924B | 9075ms | 3701ms |
| msgpack | 8857B | 3340ms | 13842ms |
| protobuf | 10018B | 21229ms | 22077ms |
| yas | 10463B | 2107ms | 1554ms |
benchmarked on Ubuntu with GCC 10.3.0, more details can be found here
If still not convinced read more in library motivation section.
#include <bitsery/bitsery.h>
#include <bitsery/adapter/buffer.h>
#include <bitsery/traits/vector.h>
enum class MyEnum:uint16_t { V1,V2,V3 };
struct MyStruct {
uint32_t i;
MyEnum e;
std::vector<float> fs;
};
template <typename S>
void serialize(S& s, MyStruct& o) {
s.value4b(o.i);
s.value2b(o.e);
s.container4b(o.fs, 10);
}
using Buffer = std::vector<uint8_t>;
using OutputAdapter = bitsery::OutputBufferAdapter<Buffer>;
using InputAdapter = bitsery::InputBufferAdapter<Buffer>;
int main() {
MyStruct data{8941, MyEnum::V2, {15.0f, -8.5f, 0.045f}};
MyStruct res{};
Buffer buffer;
auto writtenSize = bitsery::quickSerialization<OutputAdapter>(buffer, data);
auto state = bitsery::quickDeserialization<InputAdapter>({buffer.begin(), writtenSize}, res);
assert(state.first == bitsery::ReaderError::NoError && state.second);
assert(data.fs == res.fs && data.i == res.i && data.e == res.e);
}
For more details go directly to quick start tutorial.
This documentation comprises these parts:
documentation is in progress, most parts are empty, but contributions are welcome.
Works with C++11 compiler, no additional dependencies, include <bitsery/bitsery.h> and you're done.
some bitsery extensions might require higher C++ standard (e.g.
StdVariant)
Library is tested on all major compilers on Windows, Linux and macOS.
bitsery is licensed under the MIT license.
If you find this project useful or interesting, or just want to say thanks, you can buy me a coffee! Your support keeps me motivated to maintaining and improving this project.
53 followers · starred Dec 2020
135 followers · starred Aug 2024
46 followers · starred Oct 2017
1,281 followers · starred Jan 2023