A equipe "Fun Propulsion Labs" do Google recentemente abriu o código do FlatBuffers. Construído especialmente para suprir necessidades de performance de desenvolvedores de jogos, o FlatBuffers armazena dados serializados em buffers que podem ser tanto armazenados em arquivo ou transferidos via rede, sem nenhuma sobrecarga de parsing.
Alguns dos principais recursos do FlatBuffers são -
- Acesso a dados serializados sem empacotamente/desempacotamento;
- Velocidade e eficiência de memória - apenas o tamanho do buffer é necessário para acessar os dados; Não requer alocação de memória adicional para acessar o buffer;
- Flexibilidade - compatibilidade entre versões através de campos opcionais
- Código-fonte gerado é muito pequeno.
- Fortemente tipado - erros são capturados em tempo de compilação ao invés de em tempo de execução;
- Conveniência - Código sucinto através da geração de cabeçalhos C++. Funcionalidade opcional para, se necessário, fazer parse de esquemas e representações JSON em tempo de execução de maneira eficientemente (mais veloz e com uso mais eficiente de memória em relação a outros interpretadores JSON);
- Multi-Plataforma: Escrito em C++ sem dependências fora da STL, portanto pode ser utilizado em qualquer plataforma que possua um compilador C++. Atualmente, o projeto inclui métodos para construir bibliotecas para Android, Linux, Windows e OSX.
A vantagem do FlatBuffers sobre soluções alternativas como Protocol Buffers ou interpretadores JSON, é possuir menor sobrecarga, especialmente devido a ausência de analisadores.
Utilizar o FlatBuffers em C++ envolve os seguintes passos -
- Crie um arquivo de schema utilizando a DSL especificada;
- Use o compilador de schema para gerar os arquivos de cabeçalho C++;
- Inclua em seu programa o arquivo de cabeçalho gerado (é necessário também que arquivo flatbuffers/flatbuffers.h esteja no caminho de seu programa);
- Leia e escreva dados utilizando a classe FlatBufferBuilder (que constrói o flat buffer binário);
Há ainda algumas limitações, como evidenciado em discussões passadas no grupo de discussão. O suporte à Java é também experimental neste estágio. O suporte à C# é um dos pedidos mais populares, e pode chegar na próximo lançamento.
Você pode aprender mais sobre o FlatBuffers acessando a documentação.
Outro projeto que evita o passo de codificação/decodificação para conseguir vantagens de desempenho e vale a pena ser visto, é o Cap'n Proto.