java序列化的(二)

本文探讨了Java中序列化的两种情况:一是多次序列化同一对象时的处理方式;二是使用transient关键字来排除某些属性不参与序列化的过程。通过具体实例说明了transient的作用及其对序列化的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


java如果多次序列化一个对象,只有第一次序列化时才把该java对象转换成字节序列并输出,而以后的序列化只是输出一个编号而已。

1.自定义序列化

(1)被序列化的类中属性用transient修饰时,该属性将完全隔离在序列化之外。下面是个例子:

public class TransientPer {
	public static void main(String[] args){
		ObjectOutputStream oos=null;
		ObjectInputStream ois=null;
		try{
			//下面三行就是对象实现序列化并输出到文件中的一般操作
			oos=new ObjectOutputStream(new FileOutputStream("object.txt"));
			Person ps=new Person("qianhao",18);
			//将对象输出到输出流,放到了object.txt文件
			oos.writeObject(ps);
			ois=new ObjectInputStream(new FileInputStream("object.txt"));
			Person p=(Person)ois.readObject();
			System.out.println(p.getAge());
		}
		catch(Exception e){e.printStackTrace();}
		finally{
			try{
				if(oos!=null){oos.close();}
				if(ois!=null){ois.close();}
			}
			catch(Exception e1){e1.printStackTrace();}
		}
	}
}

按道理输出age应该为18,但是由于age被transient所修饰,所以age没有被序列化与反序列化。所以输出age为0

2.java的序列化机制保证在序列化某个对象之前,先调用该对象的writePlace方法(该方法在被序列化的类中进行复写),如果该方法返回另一个java对象,则系统转为序列化另一个java对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值