Java >> Java tutorial >  >> Tag >> transient

Hvorfor har Java forbigående felter?

Hvorfor har Java forbigående felter?

Svar

transient nøgleord i Java bruges til at angive, at et felt ikke skal være en del af serialiseringsprocessen (hvilket betyder gemt, ligesom til en fil).

Fra Java Language Specification, Java SE 7 Edition, afsnit 8.3.1.3. transient Felter:

Variabler kan være markeret med transient for at indikere, at de ikke er en del af et objekts vedvarende tilstand.

Du kan f.eks. have felter, der er afledt af andre felter, og som kun bør gøres programmatisk, i stedet for at få tilstanden til at fortsætte via serialisering.

Her er en GalleryImage klasse, som indeholder et billede og et miniaturebillede afledt af billedet:

class GalleryImage implements Serializable
{
    private Image image;
    private transient Image thumbnailImage;

    private void generateThumbnail()
    {
        // Generate thumbnail.
    }

    private void readObject(ObjectInputStream inputStream)
            throws IOException, ClassNotFoundException
    {
        inputStream.defaultReadObject();
        generateThumbnail();
    }    
}

I dette eksempel er thumbnailImage er et miniaturebillede, der genereres ved at kalde generateThumbnail metode.

thumbnailImage feltet er markeret som transient , så kun den originale image er serialiseret i stedet for at bevare både det originale billede og miniaturebilledet. Dette betyder, at mindre lagerplads ville være nødvendig for at gemme det serialiserede objekt. (Selvfølgelig kan dette eller måske ikke være ønskeligt afhængigt af kravene til systemet - dette er blot et eksempel.)

På tidspunktet for deserialiseringen er readObject metode kaldes til at udføre alle nødvendige operationer for at gendanne objektets tilstand tilbage til den tilstand, hvor serialiseringen fandt sted. Her skal miniaturebilledet genereres, så readObject metoden tilsidesættes, så thumbnailet vil blive genereret ved at kalde generateThumbnail metode.

For yderligere information har artiklen Discover the secrets of Java Serialization API (som oprindeligt var tilgængelig på Sun Developer Network) et afsnit, der diskuterer brugen af ​​og præsenterer et scenarie, hvor transient søgeord bruges til at forhindre serialisering af visse felter.


Java tag