728x90
반응형
-
헤더(header) 전용 C++ 이진 직렬화(binary serialization) 라이브러리.
-
실시간 데이터 전송, 특히 게임의 네트워킹 요구 사항을 중심으로 설계되었습니다.
-
모든 크로스 플랫폼 요구 사항은 컴파일 타임에 시행되므로 직렬화된 데이터는 메타 데이터 정보를 저장하지 않으며 가능한 작습니다.
- 크로스 플랫폼 호환
- 속도와 공간에 최적화되었습니다.
- 코드 생성이 필요하지 않습니다. IDL이나 메타 데이터가 없어도 직접 유형을 사용하십시오.
- 직렬화 해제시 구성 가능한 런타임 오류 점검.
- 스트림 (파일, 네트워크 스트림 등 ...) 또는 버퍼 (벡터, c- 어레이 등) 등 모든 소스에서 읽고 쓸 수 있습니다.
- 사용하지 않는 것에 대한 비용을 지불하지 마십시오! -확장을 통해 직렬화를 사용자 정의하십시오. 몇 가지 주목할만한 확장은 다음을 허용합니다.
- 유형에 대한 순방향 / 역방향 호환성.
- 맞춤형 런타임 다형성을 지원하는 스마트하고 생생한 포인터.
- 세분화 된 비트 수준 직렬화 제어.
- 모든 유형에 쉽게 확장 할 수 있습니다.
- 직렬화 제어를 개선하기 위해 간단한 구문 및 / 또는 자세한 구문을 허용합니다.
- 구성 가능한 엔디안 지원.
- 매크로가 없습니다.
- 숫자와 기능 목록을 보고 스스로 결정하십시오.
data size | serialize | deserialize | |
---|---|---|---|
bitsery | 6913B | 1252ms | 1170ms |
bitsery_compress | 4213B | 1445ms | 1325ms |
boost | 11037B | 9952ms | 8767ms |
cereal | 10413B | 6497ms | 5470ms |
flatbuffers | 14924B | 6762ms | 2173ms |
yas | 10463B | 1352ms | 1109ms |
yas_compress | 7315B | 1673ms | 1598ms |
-
GCC 8.3.0으로 Ubuntu에서 벤치마킹 한 자세한 내용은 here 를 참조하십시오.
-
여전히 확신이 없다면 라이브러리 동기 부여 섹션에서 더 많은 것을 읽으십시오.
#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 namespace bitsery;
using Buffer = std::vector<uint8_t>;
using OutputAdapter = OutputBufferAdapter<Buffer>;
using InputAdapter = InputBufferAdapter<Buffer>;
int main() {
MyStruct data{8941, MyEnum::V2, {15.0f, -8.5f, 0.045f}};
MyStruct res{};
Buffer buffer;
auto writtenSize = quickSerialization<OutputAdapter>(buffer, data);
auto state = quickDeserialization<InputAdapter>({buffer.begin(), writtenSize}, res);
assert(state.first == ReaderError::NoError && state.second);
assert(data.fs == res.fs && data.i == res.i && data.e == res.e);
}
-
추가 종속성 없이 C++11 컴파일러와 함께 작동하며
<bitsery/bitsery.h>
가 포함되어 있습니다.일부 bitsery 확장은 더 높은 버전의 C++ 표준(예:
StdVariant
)이 필요할 수 있습니다.
- 이 라이브러리는 다음에서 테스트되었습니다
- Windows: Visual Studio 2015, MinGW (GCC 5.2)
- Linux: GCC 5.4, GCC 6.2, Clang 3.9
- OS X Mavericks: AppleClang 8
- bitsery 는 MIT license 입니다.
728x90
반응형
'C C++' 카테고리의 다른 글
[리눅스] C++ 에서 칼라 글자 출력 (0) | 2021.05.16 |
---|---|
나노로그(NanoLog) (0) | 2020.03.03 |
C++ std::any (0) | 2019.08.22 |
libcurl 빌드 하기 (Visual Sutdio) (0) | 2019.08.15 |
Serial (KMDF) sample driver's DriverEntry routine (0) | 2019.01.17 |