java序列化Seralizable

一 应用场景

Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。

将序列化对象写入文件之后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有对象中的数据类型可以用来在内存中新建对象。

在进行Java对象序列化的时候,会把其状态保存为一组字节,在对这些对象反序列化的时候再将这些字节组装成对象。但值得注意的事,对象序列化保存的是对象的”状态“,即它的成员变量,因此类中的静态变量不会被序列化。

 

二  实例演示

1 要使对象序列化需要实现Serialiable接口:(定义一个类如:Ser 实现Serialiable接口)

import java.io.Serializable;
public class Ser implements Serializable{
	/**
	private static final long serialVersionUID = -9177385581054040294L;
	 */
	public  int age;
	public String name;
	public transient String sex;//通过加入transient关键字使得序列化对象时忽略掉该属性
}

2 编写测试类进行测试

import org.junit.Test;
import junit.framework.TestCase;
public class TestCompare extends TestCase {
     //对象序列化
   @Test
   public void testSerializable() throws IOException{
	   Ser ser=new Ser();
	   ser.age=10;
	   ser.name="李四";
	   ser.sex="男";
	   FileOutputStream fo = null;
	   try {
		fo=new FileOutputStream("D:/a.txt");
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		System.out.println("文件不存在");
		e.printStackTrace();
	}
	   ObjectOutputStream obj=new ObjectOutputStream(fo);
	   obj.writeObject(ser);
	   obj.close();
	   fo.close();
	   System.out.println("对象序列化完成");   
   }
   
   
   
   //对象反序列化
   @Test
   public void testSerializable2() throws IOException, ClassNotFoundException{
	   FileInputStream file=new FileInputStream("D:/a.txt");
	   ObjectInputStream obj=new ObjectInputStream(file);
	   Ser ser=(Ser) obj.readObject();
	   System.out.println(ser.age+"   "+ser.name+"    "+ser.sex);  
   }
}

3 运行结果

在D盘下生成a.txt文件,是Ser对象的字节序列。通过反序列化可将该文件还原Ser对象状态。由于之前Ser对象的sex属性加了Transient关键字,因此序列化的时候忽略掉了该属性,导致反序列化的Ser对象的sex值为null

对象序列化完成
10   李四    null

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值