Segundo a Wikipédia:
Em Ciência da Computação, no contexto de armazenamento e transmissão de dados, a serialização é o processo de salvar um objeto em um meio de armazenamento (como um arquivo de computador ou um buffer de memória) ou transmiti-lo por uma conexão de rede, seja em forma binária ou em formato de texto como o XML. Esta série de bytes pode ser usada para recriar um objeto com o mesmo estado interno que o original.
Fonte: http://pt.wikipedia.org/wiki/Serializa%C3%A7%C3%A3o
Essa técnica é muito útil quando se deseja salvar dados como arrays ou objetos em arquivos, cookies, sessões ou transmiti-los via sockets, por exemplo.
Vou dar um exemplo básico de serialização usando PHP e outro usando Python.
PHP
O PHP possui as funções serialize e unserialize, que funcionam de forma muito simples. Um exemplo prático é suficiente para compreender.
$arr = array( 'dado 1', 'dado 2' ); var_dump( $arr ); $serArr = serialize( $arr ); var_dump( $serArr ); $unSerArr = unserialize( $serArr ); var_dump( $unSerArr ); |
Saída:
array(2) {
[0]=>
string(6) "dado 1"
[1]=>
string(6) "dado 2"
}
string(40) "a:2:{i:0;s:6:"dado 1";i:1;s:6:"dado 2";}"
array(2) {
[0]=>
string(6) "dado 1"
[1]=>
string(6) "dado 2"
}
Veja que inicialmente o dado é um array. Após a serialização, vira uma string, que pode ser salva em arquivo, cookie, sessão ou transmitida byte a byte via socket. Após ser desserializada, volta a ser um array, da mesma forma como era antes.
Isso vale para qualquer tipo de dado: arrays, objetos, arrays de objetos, objetos com outros objetis intanciados…
Python
O Python possui o módulo pickle, que permite salvar a serialização direto num arquivo ou atribuí-la a uma variável. O mesmo vale para a desserialização: pode desserializar um dado direto de um arquivo ou a partir de dados de uma variável.
Vou mostrar um exemplo semelhante ao anterior, usando apenas variáveis:
#!/usr/bin/env python import pickle; arr = [ 'dado 1', 'dado 2' ]; print arr; serArr = pickle.dumps( arr ); print serArr; unSerArr = pickle.loads( serArr ); print unSerArr; |
Saída:
['dado 1', 'dado 2'] (lp0 S'dado 1' p1 aS'dado 2' p2 a. ['dado 1', 'dado 2']
Novamente, iniciamos com um array (lista para os mais íntimos ao Python :P ), passando a uma string representando a lista serializada. Ao fim, temos a lista original.
Para usar arquivos, basta usar dump e load, em vez de dumps e loads. Mais exemplos podem ser vistos na documentação do módulo pickle.
Sou Roberto Beraldo (ou apenas Beraldo), desenvolvedor PHP há mais de 15 anos, numa jornada de desenvolvimento para me aprofundar no mundo DevOps e Cloud. Bacharel em Ciência da Computação, com uma base sólida em desenvolvimento web e conhecimentos em DevOps e Computação em Nuvem. Estou dedicado a conectar o desenvolvimento de software com a gestão de infraestrutura.