Maison > Java > javaDidacticiel > le corps du texte

Quel est le but du mot clé « Transient » en Java ? Comment l'utiliser efficacement ?

王林
Libérer: 2024-08-21 06:07:02
original
1120 Les gens l'ont consulté

What is the Purpose of the “Transient” Keyword in Java? How to Effectively Use It?

1. Introduction au mot-clé transitoire en Java

1.1 Que signifie « transitoire » en Java ?

Le mot-clé transient en Java est un modificateur appliqué aux champs de classe pour indiquer qu'ils ne doivent pas être sérialisés. Lorsqu'un objet est sérialisé, tous ses champs sont convertis en un flux d'octets. En marquant un champ comme transitoire, vous demandez à la machine virtuelle Java (JVM) d'ignorer ce champ lors de la sérialisation.

1.2 Pourquoi utiliser le mot-clé transitoire ?

L'utilisation du mot-clé transient est essentielle lorsque vous souhaitez empêcher la sérialisation d'informations sensibles, telles que les mots de passe, ou de données non essentielles, comme les caches ou les valeurs dérivées. Ceci est crucial à la fois pour la sécurité et l’optimisation des performances.

Exemple :

import java.io.Serializable;

public class UserSession implements Serializable {
    private String userName;
    private transient String password;

    public UserSession(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    @Override
    public String toString() {
        return "UserSession{" +
                "userName='" + userName + ''' +
                ", password='" + password + ''' +
                '}';
    }
}
Copier après la connexion

Dans cet exemple, mot de passe est marqué comme transient , il ne sera donc pas sérialisé avec l'objet UserSession.

2. Comprendre les cas d'utilisation et les avantages

Pour exploiter pleinement le mot-clé transient, il est important de comprendre ses cas d'utilisation et ses avantages spécifiques.

2.1 Protection des données sensibles

L'une des principales raisons d'utiliser transient est de protéger les données sensibles pendant la sérialisation. Par exemple, le stockage de mots de passe en texte brut dans des objets sérialisés peut constituer un risque pour la sécurité. En marquant ces champs comme transient , vous vous assurez que ces données sont exclues de la sérialisation.

Exemple :

// Serialization Process
UserSession session = new UserSession("JohnDoe", "supersecret");
System.out.println("Before Serialization: " + session);

FileOutputStream fileOut = new FileOutputStream("session.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(session);
out.close();
fileOut.close();

// Deserialization Process
FileInputStream fileIn = new FileInputStream("session.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
UserSession deserializedSession = (UserSession) in.readObject();
in.close();
fileIn.close();

System.out.println("After Deserialization: " + deserializedSession);
Copier après la connexion

Sortie :

Before Serialization: UserSession{userName='JohnDoe', password='supersecret'}
After Deserialization: UserSession{userName='JohnDoe', password='null'}
Copier après la connexion

Comme indiqué, le mot de passe n'est pas conservé après la désérialisation.

2.2 Amélioration des performances

Parfois, une classe peut contenir des champs qui peuvent être recalculés plutôt que stockés. Marquer ces champs comme transitoires peut réduire la quantité de données sérialisées, améliorant ainsi les performances.

2.3 Éviter la sérialisation des champs non sérialisables

Certains objets, tels que les threads, sont intrinsèquement non sérialisables. Si une classe comporte des champs qui ne sont pas sérialisables mais qui n'ont pas besoin d'être conservés, les marquer comme transitoires peut éviter les problèmes de sérialisation.

Exemple :

public class TaskExecutor implements Serializable {
    private transient Thread thread;

    public TaskExecutor() {
        this.thread = new Thread();
    }

    // Additional methods
}
Copier après la connexion

Ici, le champ thread est marqué comme transient car les objets Thread ne peuvent pas être sérialisés.

3. Alternatives au mot-clé transitoire

Bien que le mot-clé transient soit puissant, il existe d'autres approches pour contrôler la sérialisation en Java.

3.1 Utilisation de l'interface externalisable

En savoir plus sur : Quel est le but du mot clé « Transient » en Java ? Comment l’utiliser efficacement ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal