Estive pensando sobre serialização de objetos no java, onde temos que implementar a interface serializable em objetos que precisam ser serializados.
Mas por que temos que fazer isso, por que todas as classes não são serializadas por padrão? Nessa situação teremos algum problema de performance ou qualquer outro?
Cabe acrescentar que há dois tipos de serialização: automatica via Serializable e a manual via Externalizable, sendo que nessa segunda você deve dizer como o objeto deve ser serializado e recuperado.
Na documentação não diz nada a respeito sobre performance, e creio não haver, pois uma classe só será serializada quando (exemplos que peguei de cabeça agora, há mais):
http-session quando em cluster/load-balance e a sessão precisa ser transferida entre containers
objetos que precisam trafegar na rede ou gravados em disco
Transfer objects, quando você precisa distribuir seus beans entre containers
Na minha visão é apenas uma questão de organização (é como você instalar seu SO preferido em versão full de 8GB quando você na verdade precisa apenas de um editor de texto ascii), pois a JVM só vai tentar realmente serializar algo quando precisar. Ou seja, não é porque sua classe está na hierarquia de Serializable que ele vai serializar. Em um atual projeto apenas os DTOs e objetos de http-session são serializaveis. Nem mesmo as jpa-entities necessitam serialização.
Abraços
rubensdemelo
Você só serializa os objetos que você quer “guardar” o estado atual deles.
Cada caso é um caso. As vezes você precisa, as vezes não.
gomesrod
Eu acho que você quer saber por que não pode simplesmente serializar/desserializar seu objeto sem ter de colocar a interface Serializable, já que ela não faz nada, não tem nenhum método… é isso?
Na verdade ela só serve para você dizer à JVM que tomou os cuidados necessários para que o objeto possa ser serializado sem erro. Veja uma explicação mais completa neste tópico: