java中的序列化

序列化,是指把对象转换成二进制流存储在外存内;反序列化,是指从二进制流中恢复对象。由于当程序终止时,对象中存储的值就会消失,通过序列化,可以存储对象的值。序列化的缺点就是一些有用的信息存储在外存上,而不在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关键字用法的理解,希望对你们有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值