O que exatamente significa para uma classe estar Serializable
em Java? Ou, em geral, para esse assunto ...
java
serializable
Ritwik Bose
fonte
fonte
Serializable
:Serializability of a class is enabled by the class implementing the java.io.Serializable interface. Classes that do not implement this interface will not have any of their state serialized or deserialized. All subtypes of a serializable class are themselves serializable. The serialization interface has no methods or fields and serves only to identify the semantics of being serializable.
Respostas:
A serialização está persistindo um objeto da memória para uma sequência de bits, por exemplo, para salvar no disco. A desserialização é o oposto - ler dados do disco para hidratar / criar um objeto.
No contexto da sua pergunta, é uma interface que, se implementada em uma classe, essa classe pode ser serializada e desserializada automaticamente por diferentes serializadores.
fonte
Embora a maioria dos usuários já tenha dado a resposta, gostaria de adicionar um exemplo para aqueles que precisam, a fim de explicar a idéia:
Digamos que você tenha uma pessoa da classe como a seguinte:
e então você cria um objeto como este:
Você pode serializar esse objeto para vários fluxos. Farei isso em dois fluxos:
Serialização para saída padrão:
Serialização para um arquivo:
Então:
Desserializar do arquivo:
fonte
Isso significa que as instâncias da classe podem ser transformadas em um fluxo de bytes (por exemplo, para serem salvas em um arquivo) e depois convertidas novamente em classes novamente. Esse recarregamento pode ocorrer em uma instância diferente do programa ou mesmo em uma máquina diferente. A serialização (em qualquer idioma) envolve todos os tipos de problemas, especialmente quando você tem referências a outros objetos dentro do serializável.
fonte
Aqui está uma explicação detalhada da serialização : (meu próprio blog)
Serialização:
Serialização é o processo de serializar o estado de um objeto que é representado e armazenado na forma de uma sequência de bytes. Isso pode ser armazenado em um arquivo. O processo para ler o estado do objeto no arquivo e restaurá-lo é chamado desserialização.
Qual é a necessidade de serialização?
Na arquitetura moderna, sempre há a necessidade de armazenar o estado do objeto e depois recuperá-lo. Por exemplo, no Hibernate, para armazenar um objeto, devemos tornar a classe Serializable. O que ele faz é que, uma vez que o estado do objeto é salvo na forma de bytes, ele pode ser transferido para outro sistema que pode ler o estado e recuperar a classe. O estado do objeto pode vir de um banco de dados ou de uma jvm diferente ou de um componente separado. Com a ajuda da serialização, podemos recuperar o estado do objeto.
Código Exemplo e explicação:
Primeiro, vamos dar uma olhada na classe Item:
No código acima, pode ser visto que a classe Item implementa Serializable .
Essa é a interface que permite que uma classe seja serializável.
Agora podemos ver que uma variável chamada serialVersionUID é inicializada na variável Long. Esse número é calculado pelo compilador com base no estado da classe e nos atributos da classe. Este é o número que ajudará a jvm a identificar o estado de um objeto ao ler o estado do objeto no arquivo.
Para isso, podemos dar uma olhada na documentação oficial da Oracle:
Se você notou que existe outra palavra-chave que é transitória .
Se um campo não for serializável, ele deve ser marcado como transitório. Aqui, marcamos o itemCostPrice como transitório e não queremos que ele seja gravado em um arquivo
Agora vamos dar uma olhada em como escrever o estado de um objeto no arquivo e depois ler a partir daí.
No exemplo acima, podemos ver um exemplo de serialização e desserialização de um objeto.
Para isso, usamos duas classes. Para serializar o objeto, usamos ObjectOutputStream. Nós usamos o método writeObject para gravar o objeto no arquivo.
Para desserializar, usamos ObjectInputStream que lê o objeto no arquivo. Ele usa readObject para ler os dados do objeto no arquivo.
A saída do código acima seria como:
Observe que itemCostPrice do objeto desserializado é nulo, pois não foi gravado.
fonte
A serialização envolve salvar o estado atual de um objeto em um fluxo e restaurar um objeto equivalente desse fluxo. O fluxo funciona como um contêiner para o objeto
fonte
Serializable é chamado como uma interface, mas é mais como um sinalizador para o subsistema Serialization, em tempo de execução. Diz que este objeto pode ser salvo. Todas as variáveis de instância de objetos, com exceção de nenhum objeto serializável e aquelas marcadas como voláteis, serão salvas.
Imagine que seu aplicativo possa alterar a cor como uma opção, sem manter essa configuração externa, você precisará alterar a cor toda vez que a executar.
fonte
Serialização é uma técnica para armazenar ou gravar objetos e dados em arquivos. Usando
ObjectOutputStream
eFileOutputStream
classes. Essas classes têm seus métodos específicos para persistir os objetos. gostarwriteObject();
para uma explicação clara com figuras. Veja aqui para mais informações
fonte
Apresentar de outra perspectiva. A serialização é um tipo de interface chamada 'interface do marcador'. Uma interface de marcador é uma interface que não contém declarações de método, mas apenas designa (ou "marca") uma classe que implementa a interface como tendo alguma propriedade. Se você entender o polimorfismo, isso fará muito sentido. No caso da interface do marcador Serializable, o método ObjectOutputStream.write (Object) falhará se o argumento não implementar a interface. Este é um erro potencial em java, poderia ter sido ObjectOutputStream.write (Serializable)
Altamente recomendado: Leia o item 37 do Effective Java de Joshua Bloch para saber mais.
fonte
Serialização: Gravando o estado do objeto em um arquivo / rede ou em qualquer outro lugar. (Formulário médio suportado por objeto Java para formulário suportado por arquivo ou formulário suportado por rede)
Desserialização: Leitura do estado do objeto em Arquivo / Rede ou em qualquer outro lugar. (Formulário médio suportado por arquivo / rede para o formulário suportado por objeto Java)
fonte
Apenas para adicionar às outras respostas e com relação à generalidade. A serialização às vezes é conhecida como arquivamento, por exemplo, em Objective-C.
fonte