transient关键字的介绍:

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

注意方面:

1、transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。

2、被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

3、一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。也可以认为在将持久化的对象反序列化后,被transient修饰的变量将按照普通类成员变量一样被初始化。

下面通过一个例子来进行说明:

package thread.learm3;
import java.io.Serializable;
public class UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
private String name ;
private transient String pwd ;
// private String pwd ; //在运行时,大家可以比较下不同
public UserInfo(String name,String pwd){
this.name =name;
this.pwd =pwd;
}
public String toString(){
return "name=" +name +",psw=" +pwd ;
}
}

测试:

-

package thread.learm3;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Arrays; public class Main {
public static void main(String[] args) {
UserInfo userInfo = new UserInfo("Jim" , "123456" );
UserInfo userInfo2 = new UserInfo("Tom" , "112233" );
ArrayList<UserInfo> list = new ArrayList<>(Arrays.asList(userInfo, userInfo2));
try {
// 序列化,被设置为transient的属性没有被序列化
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(
"UserInfoList.txt"));
o.writeObject(list);
o.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
// 重新读取内容
ObjectInputStream in = new ObjectInputStream( new FileInputStream(
"UserInfoList.txt"));
ArrayList<UserInfo> userInfoArrayList = (ArrayList<UserInfo>) in.readObject();
// 读取后psw的内容为null
System.out.println(userInfoArrayList.get(0).toString());
System.out.println(userInfoArrayList.get(1).toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}

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

最新文章

  1. clickheat简介
  2. 整合Spring Data JPA与Spring MVC: 分页和排序
  3. iOS学习笔记(5)— UITextField
  4. hdu acmsteps 2.2.1 Fibonacci
  5. 【Todo】秒杀系统材料
  6. 统计机器学习(statistical machine learning)
  7. Android Spinner列表选择框
  8. cuzysdk购物模块 36kr+本期背景图
  9. linux下tomcat 8的安装以及tomcat启动慢问题
  10. 【云服务器部署】---Linux下安装nginx
  11. protobuf 动态创建
  12. 【C#】解析C#中管道流的使用
  13. 部署MySQL自动化运维工具inception+archer
  14. linux命令学习——cat
  15. Nginx跳转Tomcat
  16. IOS7的蛋疼各种收集
  17. NHibernate初学六之关联多对多关系
  18. (转)【经验之谈】Git使用之TortoiseGit配置VS详解
  19. [网络]Linux一些网络知识
  20. VirtualBox 命令行操作

热门文章

  1. OpenResty 简介
  2. ASP.NET Core Controller与IOC的羁绊
  3. three.js 中使用多线程以及性能测试
  4. Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架
  5. reactjs踩坑记
  6. [Skill] git下载助手
  7. docker nginx 自定义配置容器
  8. 《犬夜叉2021》我想通过Binder找到你
  9. UnityToLaya小插件-找出空格并替换
  10. 单片机—Arduino UNO-R3—学习笔记001