序列化,是指把对象转换成二进制流存储在外存内;反序列化,是指从二进制流中恢复对象。由于当程序终止时,对象中存储的值就会消失,通过序列化,可以存储对象的值。序列化的缺点就是一些有用的信息存储在外存上,而不在java安全机制控制的范围内,存在信息被窃取的隐患。而通过transient关键字,就可以指定某个值不被序列化,从而保障了数据的安全性。
示例代码:
/**************************************************
* 功能:对象的序列化与Transient关键字的实践
* 作者:liaisuo
* 日期:2013-06-20
***************************************************
* 修改履历:
*
*
***************************************************/
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class SerTest {
//学生对象序列化
public void serMethod(Student stu){
try {
//创建文件
FileOutputStream fos=new FileOutputStream("E:\\test.txt");
//与文件建立关联
ObjectOutputStream oos=new ObjectOutputStream(fos);
//将对象写入文件中
oos.writeObject(stu);
//关闭输出流
oos.close();
} catch (FileNotFoundException e) { //文件不存在异常
e.printStackTrace();
} catch (IOException e) {//输入输出流异常
e.printStackTrace();
}
}
//学生对象反序列
@SuppressWarnings("finally")
public Student DSerFunction(){
Student stu=null;
try{
//获取文件
FileInputStream fis=new FileInputStream("E:\\test.txt");
//与文件建立关联
ObjectInputStream ois=new ObjectInputStream(fis);
//读取对象
stu=(Student)ois.readObject();
ois.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally{
return stu;
}
}
public static void main(String []args){
//实例化SerTest类
SerTest st=new SerTest();
//实例化学生对象
Student sdt=new Student("张三","123456");
//调用序列化方法
st.serMethod(sdt);
//调用反序列话方法
Student sden=st.DSerFunction();
System.out.println(sden.toString());
}
}
//学生实体类
@SuppressWarnings("serial")
class Student implements Serializable{
private String userName;
private transient String pwd;
public Student(String uName,String uPwd){
this.userName=uName;
this.pwd=uPwd;
}
public String toString(){
return "用户名:"+this.userName+"\n密码:"+this.pwd;
}
}
运行结果:用户名:张三 密码:null
以上就是我对序列化与反序列化及transient关键字用法的理解,希望对你们有所帮助。