java序列化封装


java序列化封装

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Serializer 
{
	static public  void serializeObject(Object obj,String path) throws IOException
	{
	    FileOutputStream fos = new FileOutputStream(path);  	     
	    ObjectOutputStream oos = new ObjectOutputStream(fos);  	 
	    oos.writeObject(obj);  	 
	    oos.flush();   
	    oos.close(); 
	}
	
	//java貌似没有引用的引用,只好返回了
	static public Object reSerializeObject(String path) throws ClassNotFoundException, IOException
	{
	    FileInputStream fis = new FileInputStream(path);  	      
	    ObjectInputStream oin = new ObjectInputStream(fis);    
	    return oin.readObject(); //会申请新的空间
	}
}


上面提到,java没有引用的引用。

反序列化代码,其实之前我是这样子写的。

	private void  reSerializeObject(Object obj,String path) throws ClassNotFoundException, IOException
	{
	    FileInputStream fis = new FileInputStream(path);  	      
	    ObjectInputStream oin = new ObjectInputStream(fis);    
	    obj = oin.readObject(); //会申请新的空间
	}

调用是这样子的

	public void test3() throws IOException, ClassNotFoundException
	{
		node node1 = new node(1);
		serializeObject(node1,"node1.obj");
		node1.id = 9;
		node node2 = new node(0);
		reSerializeObject(node2,"node1.obj");    
		System.out.println(node2.id);
		
		
	}

发现通过函数reSerializeObject是不会改变传进来的实参node2的。


本质上在于,

函数传参时,

形参obj跟node2指向同一个对象(同一块内存),

当语句obj = oin.readObject();执行后,

obj指向了另一个对象(另一块内存),

而node2还是指向原来的对象。


在c++中,可以通过两层的引用或者指针,实现我的想法的。

但java貌似只有一层的引用。

于是乎,

我直接用返回值的形式实现了我的想法。





本文作者:  linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/38118919





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值