A palavra-chave transient em Java é usada para indicar que um campo de uma classe não deve ser serializado. Quando um objeto é serializado, todos os seus campos são convertidos em um formato de byte para armazenar ou transmitir. No entanto, às vezes, alguns campos não precisam ser salvos ou transmitidos. A palavra-chave transient é usada para marcar esses campos para que eles sejam ignorados durante a serialização.
Uso da Palavra-chave transient
1.Marcar Campos como Transientes: Se um campo é marcado como transient, ele não será incluído na representação serializada do objeto.
import java.io.*;
public class Pessoa implements Serializable {
private String nome;
private transient int idade; // Este campo não será serializado
public Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
@Override
public String toString() {
return "Nome: " + nome + ", Idade: " + idade;
}
public static void main(String[] args) {
Pessoa pessoa = new Pessoa("João", 30);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("pessoa.ser"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("pessoa.ser"))) {
// Serializando o objeto
oos.writeObject(pessoa);
// Deserializando o objeto
Pessoa pessoaDeserializada = (Pessoa) ois.readObject();
System.out.println(pessoaDeserializada);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Neste exemplo, o campo idade é marcado como transient, o que significa que ele não será salvo durante a serialização. Quando o objeto é deserializado, o campo idade será inicializado com o valor padrão para seu tipo (0 para int).
Posts recentes
2.Propósito do transient:
- Segurança: Não serializar campos que contêm informações sensíveis, como senhas.
- Eficiência: Evitar a serialização de grandes campos que não precisam ser persistidos.
- Dados Computados: Campos que são calculados dinamicamente e não precisam ser salvos.
3.Deserialização e Campos Transientes: Quando um objeto é deserializado, os campos transient são inicializados com seus valores padrão. Por exemplo, int será 0, boolean será false, e referências a objetos serão null.
4.Exemplo de Resultados da Serialização e Deserialização:
import java.io.*;
public class TesteTransient {
public static void main(String[] args) {
Pessoa pessoa = new Pessoa("Ana", 25);
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("pessoa.ser"))) {
oos.writeObject(pessoa);
} catch (IOException e) {
e.printStackTrace();
}
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("pessoa.ser"))) {
Pessoa pessoaDeserializada = (Pessoa) ois.readObject();
System.out.println(pessoaDeserializada); // Nome: Ana, Idade: 0
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Neste exemplo, a saída mostrará “Nome: Ana, Idade: 0”, indicando que o campo idade, que foi marcado como transient, não foi preservado.
Resumo
- transient é usado para evitar que certos campos de uma classe sejam serializados.
- Campos transient não são incluídos na representação serializada do objeto e são inicializados com valores padrão durante a deserialização.
- É útil para proteger dados sensíveis, melhorar a eficiência da serialização ou para campos que não precisam ser persistidos.