O que é serialização?

149

Estou começando com a Programação Orientada a Objetos (OOP) e gostaria de saber: qual é o significado da serialização na linguagem OOP?

Comunidade
fonte
Também dê uma olhada neste artigo que explica por que não usar serialização codeproject.com/KB/dotnet/noserialise.aspx
Nipuna
4
Esse artigo é BS completo, daí a sua classificação.
precisa saber é
Não é o tipo de perguntas muito amplas que geralmente são removidas, porque uma pesquisa no Google daria uma resposta instantânea?
Arvymetal
2
@arvymetal você estava certo. Este foi o primeiro resultado quando eu pesquisei :) E foi exatamente o que eu estava procurando
R_G

Respostas:

143

Serialização é o processo de transformar um objeto na memória em um fluxo de bytes, para que você possa armazenar coisas em disco ou enviá-lo pela rede.

A desserialização é o processo inverso: transformar um fluxo de bytes em um objeto na memória.

Andrew Barnett
fonte
46
Além disso, os verbos Marshale Unmarshalsão sinônimos de Serializee Deserialize.
Wulfgarpro 27/12/12
4
Um objeto na memória já não está representado como bytes no nível mais baixo?
Mahacoder 12/10
3
Um objeto na memória será formatado pelo compilador, SO e / ou hardware. Mude seu compilador e você altera seu formato. Um objeto serializado terá um formato definido pelo seu código, para que você possa garantir o formato. Isso também é útil ao enviar objetos pela rede - a máquina receptora pode ter uma arquitetura completamente diferente (e, portanto, na memória).
Andrew Barnett
1
Então isso transforma em uma string?
No7
1
Uma sequência pode ser um formato válido, mas não precisa ser uma sequência. As próprias seqüências de caracteres têm formatos diferentes (ASCII, UTF8, UTF16, EBCDIC ...) e realmente demonstram o conceito razoavelmente bem. A string (um objeto na memória) abcseria serializada como 0x61 0x62 0x63(ASCII) ou 0x00 0x61 0x00 0x62 0x00 0x63(UTF16) - com ou sem itens como terminadores NUL ou comprimentos codificados.
Andrew Barnett
91

Simplesmente falando, a serialização é um processo de conversão de um objeto em um fluxo de bytes, para que possa ser transferido por uma rede ou armazenado em um armazenamento persistente.

A desserialização é exatamente o oposto - busque um fluxo de bytes do armazenamento em rede ou persistência e converta-o novamente no objeto com o mesmo estado .

O que se deve entender é como esses fluxos de bytes são interpretados ou manipulados para que obtenhamos exatamente o mesmo objeto / mesmo estado. Existem várias maneiras de conseguir isso. Alguns deles são -

  1. XML : converta o objeto em XML, transfira-o pela rede ou armazene-o em um arquivo / db. Recupere-o e converta-o novamente no objeto com o mesmo estado. Em Java, usamos a biblioteca JAXB (arquitetura Java para ligação XML) (do java 6, ele vem junto com o JDK).
  2. JSON : O mesmo pode ser feito convertendo o objeto em JSON (notação de objeto JavaScript). Novamente, existe a biblioteca GSON que pode ser usada para isso.
  3. Ou podemos usar a serialização fornecida pela própria linguagem OOP. Por exemplo, em Java, você pode serializar um Object, tornando-o implementado Serializable interfacee gravado no Object Stream.
Aniket Thakur
fonte
@AniketThakur Uma explicação muito boa, você também pode fornecer um link para eu aprender sobre JSONa partir do zero, como eu não sei nada sobre isso
Kasun Siyambalapitiya
sempre que falamos de serialização, sempre nos referimos apenas ao objeto. Não podemos usar serialização na linguagem funcional, onde não temos nenhum objeto, em vez de usarmos arquivos para transferir pela rede.
Pardeep Sharma
1
Primeiro de tudo, por que precisamos converter um objeto em fluxo de bytes e vice-versa? Por que não é uma operação implícita para um usuário que está tentando fazer isso?
Aparna Chaganti
1
Se podemos usar JSON ou XML, por que precisamos ou dizemos que convertê-los em bytes de fluxo? E então apenas os armazenamos em JSOn ou XML em vez de convertê-los em bytes.
Muhammad Faizan
78

Explicação simples via imagem:

Rex, meu cachorro, é serializado!

Explicação por Analogia:

Suponha que eu esteja conversando com meu amigo por telefone e contando a ele sobre meu novo filhote.

Aqui está o meu problema: o filhote é um mamífero vivo que respira. Como pretendo transmitir um filhote pela linha telefônica? Não posso fisicamente colocar meu filhote no receptor do telefone.

Então, em vez disso, terei que transmitir uma representação do filhote por telefone. Em outras palavras, serializo meu cão Rex e envio a ele a versão serializada do Rex pela linha telefônica:

{ "name":"Rex", "age":5, "favourite_food": pedigree_choice_cuts, "favourite_game": fetch_ball, "favourite_hobby": wagging_tail }

É uma representação perfeita - uma serialização do meu cachorro.

Resumo:

Serialização significa basicamente transformar meu cão Rex em outra coisa - um objeto JSON - que pode ser transportado pela linha telefônica como uma série de 1s e 0s. Meu amigo em Nova York pode converter esses 1s e 0s de volta em um objeto JSON - para que ele tenha uma representação perfeita do meu cachorro Rex.

BKSpurgeon
fonte
16

Confira, isso lhe dará uma boa explicação:

http://en.wikipedia.org/wiki/Serialization

Eu acho que o uso mais comum do termo serialização tem a ver com a conversão de um objeto binário em uma representação XML (ou outra string) para que ele possa ser armazenado em um banco de dados / arquivo ou enviado através de uma rede em uma chamada de serviço web. Desserialização é o processo inverso - convertendo um XML / string novamente em um objeto.

EDIT: Outro termo que você pode encontrar é marshalling / unmarshalling. Marshalling é basicamente o mesmo conceito que serializar, e desserializar é o mesmo que desserializar.

Andy White
fonte
3
Não necessariamente apenas XML, pode ser qualquer representação, até mesmo uma representação binária
Matthew Farwell
7

Serialização é o processo de converter um objeto em um fluxo de bytes para armazenar o objeto ou transmiti- lo à memória, banco de dados ou arquivo. Seu principal objetivo é salvar o estado de um objeto para poder recriá-lo quando necessário. O processo inverso é chamado desserialização.

...

Esta ilustração mostra o processo geral de serialização

Processo geral de serialização

...

Por meio da serialização, um desenvolvedor pode executar ações como enviar o objeto para um aplicativo remoto por meio de um serviço da Web, passando um objeto de um domínio para outro, passando um objeto através de um firewall como uma string XML, ou mantendo a segurança ou específicos do usuário. informações entre aplicativos

Em https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/serialization/

(ênfase minha)

Chamin Wickramarathna
fonte
5

Serialização é o processo de conversão de dados não ordenados (como um objeto) em uma série de tokens que podem ser usados ​​posteriormente para reconstruir os dados originais. O formulário serializado é geralmente uma sequência de texto, mas não precisa ser.

Dave Sherohman
fonte
2

a serialização está convertendo um objeto em sequência de bits armazenável.

para que você possa salvar esta sequência em um arquivo, banco de dados ou enviar pela rede.

depois, você pode desserializar para o objeto real e reutilizá-lo sempre que quiser.

Serviços da Web e AJAX é o exemplo mais comum de serialização. Os objetos serializados antes de enviar a resposta ao cliente.

Canavar
fonte
1

serialização nada mais é do que transferir o objeto suportado java para o formulário suportado por arquivo

                         (OR)

convertendo o formulário suportado em java para o formulário suportado em rede ... o escopo principal da serialização não passa de transferir os dados de uma camada para a outra camada ... apenas objetos serializados que podemos enviar pela rede ..

sriiii
fonte
1

Serialização é o processo de conversão de um objeto suportado Java, C # ou qualquer outro (linguagens OOP) em um formulário transportável. Dessa forma, ele é transportado pela rede ou armazenado em um disco. Para que uma classe seja serializável, ela deve implementar a interface serializável.

Nesan Mano
fonte
não apenas limitado a Java ou C #, na maioria das linguagens de programação usamos serialização. Por exemplo, no módulo python pickle é usado o mesmo.
Pardeep Sharma
0

A serialização está transformando dados em uma "sequência" linear de bytes.

Outros disseram mais ou menos a mesma coisa, mas enfatizo que os modelos de computador exigem que os dados se encaixem na RAM endereçada unidimensionalmente ou no armazenamento persistente.

A maioria das coisas que são "dados" são inerentemente serializáveis ​​(mesmo se você precisar reduzir o modelo abstrato para um linear); não serializáveis, digamos, uma conexão de rede ou uma máquina complicada baseada em estado, como um analisador.

Sobrecarregado
fonte
0

a serialização tem a ver com a conversão de um objeto binário em uma representação XML (ou outra string), para que possa ser armazenado em um banco de dados / arquivo ou enviado através da rede em uma chamada de serviço da web. Desserialização é o processo inverso - convertendo um XML / string novamente em um objeto.

viswanathan
fonte
0

Ao instanciar (construir) o objeto real (a coisa) de uma classe (blueprint), é necessário salvar o objeto (coisa) serializando-o (decompondo-o em sua estrutura atômica básica) em um espaço na memória. (Mais ou menos como o Star Treks Transporter). Você divide o fluxo de informações que podem ser transportadas para algum lugar e armazenadas. Então, quando você quiser reconstruir a coisa, basta puxar a instância armazenada atomicamente de volta para o objeto. Diferente da instaniação.

David K ​​Hill
fonte
0

Serialização é o processo de conversão de um objeto em um fluxo de dados binários, para que ele possa ser armazenado em um arquivo ou enviado através de uma rede, onde pode ser ressuscitado de volta ao mesmo objeto.

Este documento deve ajudá-lo a entender a serialização Java em detalhes.

Nikhil Katre
fonte
-1

Serialização é quando o objeto (um pedaço de memória) é convertido em uma forma em que o estado do objeto pode ser salvo no arquivo (como exemplo).

Apenas trate-o como fazer biscoitos - objeto é uma massa, biscoito - é uma massa serializada.

Então, ao "serializar" você pode enviar um cookie ao seu amigo.

Algo parecido :-)

Mr.ElectroNick
fonte
4
... exceto que os cookies não podem ser transformados novamente em massa (desserializados).
Dave Sherohman