Serialização de Dados

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.

 

The following two tabs change content below.
Graduado em Ciência da Computação, pela Universidade Federal do Paraná (UFPR), é desenvolvedor de software desde 2008, com foco em Desenvolvimento Web com PHP.