首先,应该明白的是transient是java中的一个关键字,音标为 英: [ˈtrænziənt]

  在了解transient关键字之前,应该先弄明白序列化和反序列化。所谓的序列化,通俗点的来说,就是将一个对象转化为字节序列的形式来表示,这些字节序列中包含了一个对象的相关属性信息。一个对象进行序列化之后,可以被存储到硬盘当中,也可以用于网络传输。而反序列化便是将一个对象的字节序列转化为原先的java对象,这个过程便是反序列化。

  在java中,transient关键字的作用是让被该transient关键字所修饰的成员属性不被序列化。

示例代码如下:

package other.serial;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable; /**
* 该类的代码用于演示transient关键字的使用
* @author 学徒
*
*/
public class Person implements Serializable
{
private String name="张红";
private String sex="女";
//女人的年龄是秘密,不能被外面的人知道
private transient int age=10;
//重载Object类的toString方法
@Override
public String toString()
{
return "姓名:"+this.name+" 性别:"+this.sex+" 年龄:"+this.age;
}
public static void main(String[] args)throws Exception
{
String path="H:\\xiaohonghong.obj";
//输出对象的信息并进行序列化操作
Person xiaohong=new Person();
System.out.println(xiaohong);
File output=new File(path);
FileOutputStream out=new FileOutputStream(output);
ObjectOutputStream outputObject=new ObjectOutputStream(out);
outputObject.writeObject(xiaohong); //进行反序列化操作并输出对象信息
File input=new File(path);
FileInputStream in=new FileInputStream(input);
ObjectInputStream inputObject=new ObjectInputStream(in);
xiaohong=(Person)inputObject.readObject();
System.out.println(xiaohong);
} } 运行结果:
姓名:张红 性别:女 年龄:10
姓名:张红 性别:女 年龄:0

至于为什么要不被序列化,其主要是为了节省存储空间,以及为了保证程序的整体逻辑

需要注意的是:

  1. transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量(即局部变量)是不能被transient关键字修饰的。
  2. 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

还有一点需要值得注意的是,在实现了Serializable接口的时候,其序列化过程是默认自动进行的,为此,被transient修饰符所修饰的成员变量不被序列化。而当使用Externalizable接口实现序列化操作的时候,其序列化过程是程序编写人员进行控制的,没有任何东西会进行自动的序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。

实例代码如下:

package other.serial;

import java.io.Externalizable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream; /**
* 该类的代码用于演示transient关键字的使用
* @author 学徒
*
*/
public class Person implements Externalizable
{
private String name="张红";
private String sex="女";
//女人的年龄是秘密,不能被外面的人知道
private transient int age=10;
//重载Object类的toString方法
@Override
public String toString()
{
return "姓名:"+this.name+" 性别:"+this.sex+" 年龄:"+this.age;
}
public static void main(String[] args)throws Exception
{
String path="H:\\xiaohonghong.obj";
//输出对象的信息并进行序列化操作
Person xiaohong=new Person();
System.out.println(xiaohong);
File output=new File(path);
FileOutputStream out=new FileOutputStream(output);
ObjectOutputStream outputObject=new ObjectOutputStream(out);
outputObject.writeObject(xiaohong); //进行反序列化操作并输出对象信息
File input=new File(path);
FileInputStream in=new FileInputStream(input);
ObjectInputStream inputObject=new ObjectInputStream(in);
xiaohong=(Person)inputObject.readObject();
System.out.println(xiaohong);
}
/**
* 控制需要进行序列化的成员变量
*/
@Override
public void writeExternal(ObjectOutput out) throws IOException
{
out.writeObject(name);
out.writeObject(sex);
//女人的年龄虽然是个秘密,但是序列化我是个大嘴巴,我要告诉别人
out.writeInt(age);
}
/**
* 控制进行反序列化的成员变量
*/
@Override
public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException
{
this.name=(String)in.readObject();
this.sex=(String)in.readObject();
//这样我就知道女人的年龄了
this.age=in.readInt();
} } 运行结果:
姓名:张红 性别:女 年龄:10
姓名:张红 性别:女 年龄:10

回到目录|·(工)·)

K:java序列化与反序列化—transient关键字的使用的更多相关文章

  1. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

  2. java序列化和反序列化使用总结

    一.概念 java对象序列化的意思就是将对象的状态转化成字节流,以后可以通过这些值再生成相同状态的对象.对象序列化是对象持久化的一种实现方法,它是将对象的属性和方法转化为一种序列化的形式用于存储和传输 ...

  3. java序列化和反序列化及序列化方式

    平时我们在Java内存中的对象,是无 法进行IO操作或者网络通信的,因为在进行IO操作或者网络通信的时候,人家根本不知道内存中的对象是个什么东西,因此必须将对象以某种方式表示出来,即 存储对象中的状态 ...

  4. Java序列化及反序列化

    序列化概念: 1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道 ...

  5. Java 序列化和反序列化(一)Serializable 使用场景

    目录 Java 序列化和反序列化(一)Serializable 使用场景 1. 最简单的使用:Serializable 接口 2. 序列化 ID 的问题 3. 静态字段不会序列化 4. 屏蔽字段:tr ...

  6. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  7. [转] Java序列化与反序列化

    原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...

  8. java序列化与反序列化(转)

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  9. Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨.  1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节 ...

随机推荐

  1. CCF-201512-3-画图

    问题描述 试题编号: 201512-3 试题名称: 画图 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASC ...

  2. svn搭建文档

    1.制作本地yum源 a)挂载光盘 [root@localhost ~]# mount  /dev/cdrom  /mnt b)删除/etc/yum.repos.d目录所有的repo文件 [root@ ...

  3. 最近整理AI相关感想

    前言 目前笔者致力于 在AI 开发研究,四大平台里,百度AI 提供 的开发者资料是最全,开发的友好度也是最高的,很多都已经集成在SDK中,支持许多语言体系. 其实 作为公司层面的考虑,针对技术的研究出 ...

  4. Spring JDBC(二)SimpleJdbcInsert

    上一篇写了关于jdbcTemplate的一些基本使用,这一篇来聊聊SimpleJdbcInsert SimpleJdbcInsert是springjdbc提供的一个简化插入操作的类,下面来看一下常用的 ...

  5. 移动 云MAS 发短信 .net HTTP 请求

    本人开发移动云MAS .net Http 请求  代码如下 using Newtonsoft.Json.Linq; using System; using System.Collections.Gen ...

  6. SSI学习(二)

    1.SSI指令 #config:指定返回到client浏览器的错误消息.日期和文件大小所使用的格式. #echo:在 HTML 页中插入环境变量的值. #exec:执行一个应用程序或一条 shell ...

  7. 基于Office 365的随需应变业务应用平台

    作者:陈希章 发表于 2017年9月7日 这是我去年10月底在微软技术大会(Microsoft Ignite 2016) 上面的演讲主题,承蒙大家抬爱,也沾了前一场明星讲师的光,我记得会场几乎是满座. ...

  8. string.prototype.replace 和正则表达式

    字符串的replace方法是操作字符串的常用方法之一,但这个方法只有当与正则合并使用时,才能体现出它的强大之处. 语法:str.replace(regexp|substr, newsubStr|fun ...

  9. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

    问题引入:   有一个下载功能,在Android 5.x设备上运行正常,Android 6.x上运行异常,现象是下载进度卡在0%.   问题排查发现,是sdk的target设置为23导致,修改为21则 ...

  10. linux系统安全及应用

    小伙伴们让我们一起回顾一下Linux系统安全基础知识吧 1. 系统账号清理 对于公司里刚离职或停职不久的人,处于公司信息安全考虑,给他们的账号给锁定就好了. usermod -L wangqingxi ...