O Que É Serialização? Transformar Dados em Bytes Explicado
Serialização é o processo de converter estruturas de dados em memória em um fluxo de bytes que pode ser armazenado em disco ou enviado por uma rede.
Programas mantêm dados como objetos na memória, mas discos e redes só lidam com bytes. Serialização é a tradução que transforma um objeto vivo em uma sequência plana de bytes que você pode salvar ou transmitir. Toda vez que um job de CI escreve JSON, faz cache de um build ou envia um payload pela rede, a serialização está acontecendo por baixo dos panos.
O que é serialização
Serialização achata um valor estruturado - um objeto, uma lista, um registro aninhado - em um fluxo linear de bytes que captura informação suficiente para reconstruí-lo depois. A operação inversa, a desserialização, reconstrói a estrutura em memória a partir desses bytes. As duas são sempre um par.
Formatos de texto versus binários
Os formatos de serialização se dividem em texto e binário. Formatos de texto como JSON e YAML são legíveis por humanos e fáceis de depurar, mas maiores e mais lentos. Formatos binários como Protocol Buffers e MessagePack são compactos e rápidos, mas opacos. A escolha equilibra legibilidade contra tamanho e velocidade.
Schemas e compatibilidade
Quando dois sistemas trocam dados serializados, eles precisam concordar sobre o formato. Formatos baseados em schema fixam esse contrato e permitem que o formato evolua com segurança - adicionando um campo sem quebrar leitores antigos. Essa compatibilidade para frente e para trás é essencial quando serviços fazem deploy de forma independente.
Serialização no CI
O CI serializa constantemente: ferramentas escrevem relatórios JSON ou XML, caches serializam árvores de dependências para restaurar depois, e saídas de job são serializadas para serem lidas por um job downstream. A maior parte é invisível, mas quando um cache ou relatório falha ao carregar, uma incompatibilidade de serialização ou de versão costuma ser a causa.
# A job serializes data another job deserializes
jobs:
build:
outputs:
meta: ${{ steps.gen.outputs.meta }}
steps:
- id: gen
run: echo "meta=$(jq -c . build.json)" >> $GITHUB_OUTPUTNota Latchkey
Os caches de dependências no Latchkey serializam e restauram seus pacotes entre execuções. Como o formato do cache é padrão, um cache produzido em uma execução do Latchkey é desserializado sem problemas na próxima, mantendo os builds quentes rápidos.
Principais conclusões
- Serialização achata dados em memória em um fluxo de bytes para armazenamento ou transmissão.
- Formatos de texto são legíveis mas grandes; formatos binários são compactos mas opacos.
- O CI serializa relatórios, caches e saídas de job constantemente - incompatibilidades aparecem como falhas de carregamento.