O que é serialização?

8

Eu pratico programação há algum tempo como hobby, mas só comecei a ver esse conceito recentemente. Eu pesquisei "o que é serialização" no Google várias vezes, mas nunca recebi nenhum tipo de definição, geralmente apenas exemplos de como fazê-lo. Eu o vejo nos fóruns Ogre, Bullet e em todos os outros fóruns, então acho que já é hora de realmente entender o que é e por que usá-lo.

Editar

Para esclarecer, estou procurando mais por que usá-lo, especialmente no sentido de programação de jogos. Por exemplo, a API Bullet Physics fala muito sobre serializar uma malha, então eu quero entender por que isso acontece.

Obrigado :)

Aidan Knight
fonte

Respostas:

7

Da documentação do boost.serialization : Aqui, usamos o termo "serialização" para significar a desconstrução reversível de um conjunto arbitrário de estruturas de dados C ++ em uma sequência de bytes. Esse sistema pode ser usado para reconstituir uma estrutura equivalente em outro contexto de programa. Dependendo do contexto, isso pode ser usado para implementar persistência de objetos, passagem remota de parâmetros ou outro recurso. Neste sistema, usamos o termo "archive" para nos referirmos a uma renderização específica desse fluxo de bytes. Pode ser um arquivo de dados binários, dados de texto, XML ou algum outro criado pelo usuário desta biblioteca.

Em outras palavras, serialização é qualquer processo que transforma objetos na memória em algum tipo de bytestream, e a desserialização faz o inverso, pegando um bytestream e transformando-o novamente em objetos na memória.

O termo "serialização" não implica nada no formato do bytestream. Pode ser um formato binário empacotado com eficiência ou uma descrição XML ou YAML solta. Pode até ser o código-fonte na própria linguagem original ou em outra linguagem de programação, como JSON , que é um subconjunto de JavaScript. O formato exato do fluxo serializado deve ser escolhido com base em como você pretende usá-lo.

A serialização é um recurso interno de muitas linguagens e ambientes - por exemplo, Java e Python . Em linguagens de nível inferior, como C e C ++, é necessário usar (ou escrever) bibliotecas de serialização , pois o mecanismo fornecido pela linguagem geralmente não é bom o suficiente - ele não pode seguir ou serializar ponteiros e referências e está sujeito a problemas de endianness, por exemplo.

A Wikipedia tem um artigo decente sobre serialização.

A serialização é usada extensivamente em jogos (e todos os softwares) para muitos propósitos:

  • Carregando a lista de todos os feitiços no jogo a partir de arquivos de recursos.
  • Salvando e carregando o jogo.
  • Gravando o estado das coisas (por exemplo, posições e inventários de jogadores) em um banco de dados SQL ou de objeto.
  • Chamada de funções remotas através de uma rede ou outro link IPC.
Comunidade
fonte
6

Pelo que entendi, serialização é apenas o conceito de pegar um objeto ou um conjunto de objetos, transformá-los em um fluxo de bytes (para armazenamento de dados ou transmissão de rede etc.) e depois reconstruir o objeto original a partir desse bytestream (" desserialização ").

Excêntrico: É um pouco como um teletransportador de Star Trek, agora penso nisso.

Existem várias bibliotecas para isso, cada uma das quais lida com as pequenas imperfeições que tendem a atrapalhar (como pelo teste de endianness e outras).

Kaz Dragon
fonte
Isso faz sentido, e eu realmente gosto da analogia do teletransportador, que definitivamente ajuda a compreendê-lo lol. Usar serialização para redes faz todo o sentido para mim, mas usá-lo em outros lugares, como o mecanismo Bullet Physics e o formato .bullet, não entendo onde é usado lá.
Aidan Knight
Para esclarecer melhor minha confusão, encontrei este tutorial simples codeproject.com/KB/cpp/serialization_primer1.aspx e na Etapa 3, mostra a serialização de dados em um arquivo. Eu não entendo como isso é diferente de simplesmente escrever texto para um arquivo usando fopen / fwrite, etc.
Aidan Knight
Serialização é o processo de transformar objetos em seu software em texto que você pode transmitir para escrever (ou qualquer outro leitor / gravador orientado a sonho que você precisa).
3

Serializar algo significa essencialmente transformá-lo em uma série. Isso é necessário se você deseja enviar algo por uma rede ou gravá-lo em um arquivo, porque ambos esperam uma série de bytes. Portanto, geralmente é um termo chique para os sistemas de salvar e carregar. No caso do Bullet, é simplesmente pegar os dados da malha e salvá-los de uma forma que o Bullet possa efetivamente usar. Você pode salvar isso e carregá-lo mais tarde, sem precisar analisar novamente suas malhas.

Kylotan
fonte
0

Serializar / desserializar é simplesmente preparar e gravar / ler objetos no / do disco.

WernerCD
fonte
-3

Eu pessoalmente uso serialização para redes. Fora isso, não tenho muita utilidade para isso. Se você quiser saber por que ele é usado no Bullet, a melhor chance de obter uma resposta é perguntando nos fóruns do Bullet ou lendo a documentação.

Dispositivo desconhecido
fonte