¿Qué es la serialización predeterminada y personalizada? La serialización predeterminada es apropiada si la representación física y lógica no son diferentes y si no es necesario utilizar la serialización personalizada. Pero no pude obtener lo que es realmente predeterminado y personalizado.

//Default serialization form :`
    public final class StringList implements Serializable {
        private int size = 0;
        private Entry head = null;
    }
    private static class Entry implements Serializable {
        String data;
        Entry next;
        Entry previous;
    }
    ... // Remainder omitted
}

//Custom serialization form
    public final class StringList implements Serializable {
        private transient int size = 0;
        private transient Entry head = null;

    // No longer Serializable
    private static class Entry {
        String data;
        Entry next;
        Entry previous;
    }
}

Entonces, ¿hay un ejemplo bien explicado?

0
user3787990 13 dic. 2016 a las 14:20

2 respuestas

La mejor respuesta

La serialización es el proceso de mapear un objeto a una representación serial. Si desea serializar un objeto, su clase debe implementar Serializable.

En su formulario predeterminado, se serializarán ambas clases con todos sus campos. Sin embargo, en su formulario personalizado, el modificador transient en StringList indica que los campos correspondientes size y head no se serializarán . Tenga en cuenta que la clase en sí se serializará, simplemente sin esos campos. Como Entry no implementa Serializable, ya no se puede serializar como se indicó anteriormente.

0
thatguy 13 dic. 2016 a las 11:32

La serialización predeterminada utiliza la regla predeterminada para realizar la serialización. Se serializan todos los campos Serializable y no transitorios. Para ser una clase Serializable, la clase debe implementar la interfaz Serializable. Si intenta serializar un objeto del que la clase no deriva de Serializable o un objeto que posee al menos un campo que la clase no deriva de la interfaz Serializable y el campo no tiene el modificador transitorio, se producirá una excepción en tiempo de ejecución para indicar un error de serialización si serializa el objeto.

Si no desea que la regla predeterminada se aplique a todos los campos, puede definir los campos a ignorar para la serialización con el modificador transitorio y tampoco puede implementar la interfaz Serializable en las clases de estos campos (si tienes la mano sobre ellos). No implementar la interfaz Serializable no es obligatorio, pero como ocurre una excepción si intenta serializar un campo no Serializable, le permite protegerlo si olvida aplicar el modificador transitorio al campo.

Finalmente, cuando deshabilita algunos campos para la serialización, estos campos no se guardan en la salida serializada. Por lo tanto, no los recupera cuando anula la serialización de los datos que serializó.

En su ejemplo con el formulario de serialización personalizado, no se serializa nada en la clase ya que todos los campos son transitorios, mientras que en el primer ejemplo con serialización predeterminada, todos los campos (size y head) se serializan.

0
davidxxx 13 dic. 2016 a las 11:41