Java transient关键字学习
2017-02-23 21:16
337 查看
transient关键字,我们在使用Hibernate中,可以用@Transient注解某个字段不需要持久化,那么java中这个关键字是怎么样呢?
总结:当一个对象实现了Serilizable接口,那么大家都知道,这个对象可以被序列化,但是当你存在某些需求,比如你需要这个对象的某一个或者某几个属性不想被序列化的时候,可以对属性进行transient关键字声明
代码部分:
使用场景:
如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
使用总结:
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
4)只有当实现了Serilizable接口的时候,transient才能生效,java中实现了Externalizable也可以序列化,但是实现了Externalizable接口,需要writeExternal才能写入序列化,这个时候即使声明了transient,只要调用了writeExternal也可以被序列化
总结:当一个对象实现了Serilizable接口,那么大家都知道,这个对象可以被序列化,但是当你存在某些需求,比如你需要这个对象的某一个或者某几个属性不想被序列化的时候,可以对属性进行transient关键字声明
代码部分:
package org.test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; /** * @version 1.0 * @author NICK */ public class TransientTest { public static void main(String[] args) throws Exception { People people = new People(); people.setUserName("Nickwu"); people.setPassword("password"); System.out.println("people --> username: " + people.getUserName()); System.out.println("people --> password: " + people.getPassword()); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("people.txt")); oos.writeObject(people); oos.flush(); oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("people.txt")); People p = (People) ois.readObject(); ois.close(); System.out.println("p-->username: " + p.getUserName()); System.out.println("p-->password: " + p.getPassword()); } } class People implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String userName; private transient String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
使用场景:
如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
使用总结:
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
4)只有当实现了Serilizable接口的时候,transient才能生效,java中实现了Externalizable也可以序列化,但是实现了Externalizable接口,需要writeExternal才能写入序列化,这个时候即使声明了transient,只要调用了writeExternal也可以被序列化
相关文章推荐
- Java----再学习-----transient关键字
- java学习(2).static,`volatile`,transient,final等关键字
- java学习——序列化与 Transient 关键字
- java学习(1).static,volatile,transient,final等关键字
- java中transient关键字学习记录
- java关键字Transient
- Java 学习笔记 关键字
- Java中对象的串行化(Serialization)和transient关键字
- Java关键字之native,strictfp,transient,volatile
- Java关键字之native,strictfp,transient,volatile
- java关键字Transient
- Java不常用的关键字介绍 native,strictfp,transient,volatile
- Java中对象的串行化(Serialization)和transient关键字
- java串行化——Java中对象的串行化(Serialization)和transient关键字
- Java中的transient,volatile和strictfp关键字
- Java关键字之native,strictfp,transient,volatile
- Java关键字之native,strictfp,transient,volatile
- Java中对象的串行化(Serialization)和transient关键字
- Java中对象的串行化(Serialization)和transient关键字
- Java关键字之native,strictfp,transient,volatile