java中transient关键字作用

╰+哭是因爲堅強的太久メ 2022-08-22 03:47 356阅读 0赞

关键字介绍

一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。但是有种情况是有些属性是不需要序列号的,所以就用到这个关键字。只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

代码:

实现Serializable接口的UserInfo类,并且有一个transient关键字修饰的属性

[java] view plain copy

print ? 在CODE上查看代码片 派生到我的代码片

  1. import java.io.Serializable;
  1. public class UserInfo implements Serializable \{
  2. private static final long serialVersionUID = 1L;
  3. private String name ;
  4. private transient String pwd ;
  5. public UserInfo(String name,String pwd)\{
  6. this.name =name;
  7. this.pwd =pwd;
  8. \}
  9. public String getName() \{
  10. return name;
  11. \}
  12. public void setName(String name) \{
  13. this.name = name;
  14. \}
  15. public String getPwd() \{
  16. return pwd;
  17. \}
  18. public void setPwd(String pwd) \{
  19. this.pwd = pwd;
  20. \}
  21. public String toString()\{
  22. return "name=" +name +",psw=" +pwd ;
  23. \}
  24. \}

通过输入输出流编写的测试程序

[java] view plain copy

print ? 在CODE上查看代码片 派生到我的代码片

  1. import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
  1. public class Test \{
  2. public static UserInfo userInfo = null;
  3. public static ObjectOutputStream ObjectOutputStreamo= null;
  4. public static void main(String\[\] args) \{
  5. userInfo = new UserInfo("张三" , "123456" );
  6. System. out.println(userInfo);
  7. try \{
  8. // 序列化,被设置为transient的属性没有被序列化
  9. ObjectOutputStreamo = new ObjectOutputStream(new FileOutputStream(
  10. "D://UserInfo.out"));
  11. ObjectOutputStreamo.writeObject(userInfo);
  12. ObjectOutputStreamo.close();
  13. \} catch (Exception e) \{
  14. e.printStackTrace();
  15. \}
  16. try \{
  17. // 重新读取内容
  18. ObjectInputStream in = new ObjectInputStream( new FileInputStream(
  19. "D://UserInfo.out"));
  20. userInfo = (UserInfo) in.readObject();
  21. // 读取后psw的内容为null
  22. System. out.println(userInfo.toString());
  23. \} catch (Exception e) \{
  24. e.printStackTrace();
  25. \}
  26. \}
  27. \}

运行结果:

Center

从上面结果能够看出来经过transient关键字修饰的字段是不能够被序列化的。

文章来源:http://blog.csdn.net/lfsf802/article/details/43239663

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java transient关键字

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,

    相关 Java - transient关键字

    Java中的对象序列化 在讨论`transient`之前,有必要先搞清楚Java中序列化的含义; Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字