在对象序列化的时候,有些变量比如密码等等,你需希望他去序列化,否则别人就可以通过字节流来回复数据得到你的private的数据,这样是一个很危险的问题,下面使用关键字Transient 来解决这个问题,他的意思就是不需要虚拟机去序列化这个变量,我会自己去处理
package com.bird.thinking;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Date;
/**
* @use transient关键字实现对指定变量的非序列化
* @author Bird
*
*/
public class Login implements Serializable{
private Date date = new Date();
private String username;
private transient String password;//注意transient关键字的运用
public Login(String name, String pwd){
username = name;
password = pwd;
}
public String toString(){
return "Login info: \n username: " + username + "\n date: " + date + "\n password " + password;
}
public static void main(String [] args) throws Exception{
Login a = new Login("Bird", "Hehe");
System.out.println("Login a = a" + a);
ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("d://login.out"));
o.writeObject(a);
o.close();
Thread.sleep(500);
//Now Get Back
ObjectInputStream in = new ObjectInputStream(new FileInputStream("d://login.out"));
System.out.println("recovering object at " + new Date());
a = (Login)in.readObject();
System.out.println("Login a = " + a);
}
}
运行结果为
Login a = aLogin info:
username: Bird
date: Sun Oct 23 15:38:51 CST 2011
password Hehe
recovering object at Sun Oct 23 15:38:52 CST 2011
Login a = Login info:
username: Bird
date: Sun Oct 23 15:38:51 CST 2011
password null
分享到:
相关推荐
通过实现 Serializable 接口,Java对象可以被序列化和反序列化。序列化可以将对象转换为字节流,以便于存储或传输。反序列化则可以将字节流重新转换为原始对象。需要注意的是,序列化和反序列化的类必须具有相同的 ...
深入理解Java虚拟机-Java内存区域透彻分析(序列化、反序列化概念及其使用场景+实现序列化的方式+transient关键字)
深入探索Java对象的序列化 对象序列化就是把对象写入到输出流中,用来存储或者传输。...实现了序列化接口的类,如果其成员不需要序列化进去,则使用transient关键字进行修饰。 下面给出个例子:
主要介绍了Java transient关键字与序列化操作,结合实例形式详细分析了java序列化操作相关实现方法与操作注意事项,需要的朋友可以参考下
我们都知道一个对象只要实现了Serilizable接口,这个对象可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和...
本篇文章序列化、反序列化用的类是同一个类,可以通过注释main中1然后修改Stu类实现有无transient关键字修饰、serialVersionUID是否不同,得到以下结果: 1、serialVersionUID的数值大小不会影响序列化后的字节数...
Transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中,在被反序列化后,transient 变量的值被设为
要保存的也被保存了下来。一般情况下,我们仅仅需要保存逻辑... } 则company_flag字段将不会参与序列化与反序列化,但同时你也增加了为他初始值的责任。这也是序列化常常导致的问题之一。因为序列化相当于一个只接受数
Java中序列化和反序列化的区别。 什么是SerialVersionUID? 内部类和子类的区别。 JSON 相对于 XML 的优势是什么? 我们可以两次导入相同的包/类吗? JVM 会在运行时加载包两次吗? 静态加载和动态类加载的区别? ...
65. 什么是java序列化,如何实现java序列化? 48 65.1. java序列化、反序列化 48 65.2. 对象的序列化主要有两种用途: 48 65.3. 对象序列化包括如下步骤: 49 65.4. 对象反序列化的步骤如下: 49 66. 反射机制 49 ...
transient关键字(=“不应序列化字段”) 可变参数 字符串生成器 instanceof确切行为(在接口上使用null和用法) 包和导入(静态导入,重要的java.*包) 更多关键词: synchronized 、 transient 、 native 回顾:...
// 条件队列的第一个节点// 不要管这里的关键字 transient,是不参与序列化的意思private transient Node firstWaiter
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
序列化,串行化 ['siәriәlaiz]'(serializable adj.)(deserialize反序列化,反串行化) Socket [java] 网络套接字['sɒkit] stack n.堆栈 [stæk] (对应 heap 堆) statement 程序语句; 语句 ['steitmәnt]' n. 陈述,...
【基础】Java序列化与反序列化 27 为什么需要序列化与反序列化 28 如何实现Java序列化与反序列化 28 【基础】String s = new String("xyz");创建了几个字符串对象 30 【基础】接口是否可继承(extends)接口?抽象类...
程序员面试刷题的书哪个好Javonical 作为一名专业的自由程序员,我参加了(并进行了)我应得的 Java 技术测试。 它们通常是申请职位时的第一步,因此您必须确保熟悉预期的答案。...阻止该字段被序列化。