Quando criamos um objeto em um aplicativo, geralmente não nos preocupamos em como os dados serão armazenados na memória. No entanto, se você desejar armazenar o conteúdo de um objeto em um arquivo, enviar um objeto para outro processo, ou transmitir um objeto pela rede, você precisará convertê-lo para um formato diferente. Esta conversão é chamada de serialização.
Serialização é o processo de conversão de um objeto para uma sequência linear de bytes que podem ser armazenados em arquivos e transferidos. Podemos também entender como sendo um armazenamento do "estado" de um objeto.
Descerialização é o processo de converter uma sequência previamente serializada de bytes em um objeto, ou seja, é "recriar" o objeto que foi serializado com o mesmo estado (propriedades)
Descerialização é o processo de converter uma sequência previamente serializada de bytes em um objeto, ou seja, é "recriar" o objeto que foi serializado com o mesmo estado (propriedades)
Se você desejar armazenar um objeto em um arquivo para posterior recuperação, você irá armazenar a "saída de uma serialização". A próxima vez que você quiser ler este objeto, deverá chamar os métodos de descerialização, e seu objeto será "recriado" exatamente como estava no momento em que foi serializado.
Da mesma forma, se você quiser enviar um objeto para um aplicativo em execução em outro computador, você pode estabelecer uma conexão de rede, serializar o objeto, e depois descerializar o objeto no aplicativo remoto.
Na prática a serialização pode ser implementada com muito pouco código. O exemplo abaixo, que requer os namespaces "System.IO" e "System.Runtime.Serialization.Formatters.Binary"demonstra isto.
Os passos para serializar um objecto são:
- Criar um objeto "stream" para receber o resultado da serialização.
- Criar um objeto BinaryFormatter (localizado no namespace System.Runtime.Serialization.Formatters.Binary).
- Chamar o método "Serialize" de "BinaryFormatter" para serializar o objeto e armazenar a saída no objeto "streram" criado no passo 1.
Veja abaixo um exemplo de código escrito em c#:
(1) string data = "Isto será armazenado em arquivo";
(2) FileStream fs = new FileStream("StringSerializada.data", FileMode.Create);
(3) BinaryFormatter bf = new BinaryFormatter();
(4) bf.Serialize(fs, data);
(5) fs.Close();
Veja o passo-a-passo do que aconteçeu:
(1) Foi criado um objeto que será serializado, neste caso uma simples variável do tipo "string", mas poderia ser qualquer "object". É importante saber o tipo de objeto que está sendo serializado para poder fazer o "cast" de forma correta no momento de descerializar.
(2) Foi criado um arquivo em disco, com o nome "StringSerializada.data", para armazenar a informação serializada.
(3) Foi criado um objeto BinaryFormatter para realizar a serialização
(4) Foi utilizado o método "Serialize" do objeto "BinaryFormatter" para serializar a informação contida na variável "data" em um arquivo.
(5) O arquivo serializado foi fechado
Se você abrir este arquivo com o "notepad", poderá observar que o mecanismo de serialização do .NET armazena a string como texto ASCII e, em seguida, acrescenta mais alguns bytes binários antes e depois do texto para "descrever" os dados para o "descerializador".
Se tentarmos serializar um objeto qualquer ao invés de uma variável do tipo string, a classe deste objeto deverá possuir um atributo de classe conhecido como "Serializable". Conforme no exemplo abaixo:
[Serializable]
public class Aluno
{
}
Não percam os exemplos práticos, de como serializar e descerializar um objeto, na vídeo-aula abaixo:
Serializar e Descerializar Dados:
Serializar e Descerializar Objetos:
Nenhum comentário:
Postar um comentário