Pergunta

Existem boas bibliotecas de serialização C ++ existentes que suportam serialização parcial?

Por "serialização parcial", quero dizer que eu pode querer salvar os valores de 3 membros específicos e, posteriormente, poder aplicar essa cópia salva em uma instância diferente. Eu apenas atualizava esses três membros e deixaria os outros intactos.

Isso seria útil para sincronizar dados em uma rede. Digamos que eu tenha algum objeto em um cliente e um servidor e, quando um membro muda no servidor, quero enviar ao cliente uma mensagem que contém o valor atualizado para esse membro e aquele membro apenas. Não quero enviar uma cópia de todo o objeto sobre o fio.

boost::serialization À primeira vista, parece que só suporta tudo ou nada.

Editar: 3 anos depois de escrever originalmente, olho para trás e digo para mim mesmo: 'Wut?' Boost :: A serialização permite definir quais membros você deseja salvar ou não, por isso apoiaria a 'serialização parcial', como eu pareço ter descrito. Além disso, como o C ++ não possui as bibliotecas de serialização de reflexão exigem que você especifique explicitamente cada membro que você está salvando de qualquer maneira, a menos que venha com algum tipo de ferramenta externa para analisar os arquivos de origem ou ter um formato de arquivo de entrada separado usado para gerar código C ++ (por exemplo, o que os buffers de protocolo fazem). Eu acho que devo ter ficado conceitualmente confuso quando escrevi isso.

Foi útil?

Solução

Você claramente não está procurando serialização aqui.

A serialização é sobre salvar um objeto e depois recriá -lo do fluxo de bytes. Pense em videogames salvados ou o contexto da sessão para um servidor da web.

Aqui o que você precisa é de mensagens. Os planos do Google é bom para isso. Especifique uma mensagem que conterá todos os campos como opcionais, após a recepção da mensagem, atualize seu objeto com os campos que existem e deixe os outros intocados.

A grande coisa com os planos é que ele lida bem com a compatibilidade para frente e para trás, bem como o texto e a codificação binária (o texto sendo ótimo para depuração e binário ser melhor para um desempenho puro), além de uma etapa de análise de custo zero.

E você pode até decodificar as mensagens com outro idioma (digamos Python ou Ruby) se você as salvar em algum lugar e quiser reunir uma GUI HTML para inspecioná -la!

Outras dicas

Embora eu não esteja familiarizado com eles, você também pode conferir Buffers de protocolo do Google.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top