java 对象存储为dat文件

本文介绍了Java中如何将对象存储为dat文件,强调了对象需要实现Serializable接口进行序列化,以此实现缓存机制,提升用户体验。

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

先说下为什么我们要将对象存储起来。使用缓存机制不仅可以为用户节省流量,同时还可以给用户带来好的用户体验。


class MyBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private boolean myBoolean;
	private String myString;
	private Vector<String> myVector;

	public MyBean() {
	}

	public boolean isMyBoolean() {
		return myBoolean;
	}

	public void setMyBoolean(boolean myBoolean) {
		this.myBoolean = myBoolean;
	}

	public String getMyString() {
		return myString;
	}

	public void setMyString(String myString) {
		this.myString = myString;
	}

	public Vector<String> getMyVector() {
		return myVector;
	}

	public void setMyVector(Vector<String> myVector) {
		this.myVector = myVector;
	}
}

存储的对象一定要继承Serializable接口序列化   为什么要序列化对象:

在没有序列化前,每个保存在堆(Heap)中的对象都有相应的状态(state),即实例变量(instance ariable)比如:

MyBean myFoo = new  MyBean (); 
myFoo .setString(“37”); 
myFoo.setMyBoolean(true); 

  当通过下面的代码序列化之后,MyFoo对象中的width和Height实例变量的值(37,true)都被保存到foo.ser文件中,这样以后又可以把它 从文件中读出来,重新在堆中创建原来的对象。当然保存时候不仅仅是保存对象的实例变量的值,JVM还要保存一些小量信息,比如类的类型等以便恢复原来的对 象。

Test
	public static void main(String[] args) throws Exception {
		MyBean mb = new MyBean();  
        mb.setMyBoolean(true);  
        mb.setMyString("xml is cool");  
        Vector<String> v = new Vector<String>();  
        v.add("one");  
        v.add("two");  
        v.add("three");  
        mb.setMyVector(v);  
        String fileString = "D:/a.dat";  
        ObjectDatUtil.object2Dat(mb, fileString);  
        MyBean tt = ObjectDatUtil.dat2Object(fileString,MyBean.class);  
        Vector<String> vector = (Vector<String>) tt.getMyVector();  
        System.out.println(vector.toString());  
        System.out.println(tt.getMyString());  
        System.out.println(tt.isMyBoolean());  
	}


工具类:



public class ObjectDatUtil {

	private static ObjectDatUtil objectDatUtil = null;

	private ObjectDatUtil() {

	}

	public ObjectDatUtil getInstance() {
		if (objectDatUtil == null) {
			objectDatUtil = new ObjectDatUtil();
		}
		return objectDatUtil;
	}

	/**
	 * 将对象转换为DAT文件存储
	 * 
	 * @param object
	 *            要存储的对象
	 * @param filePath
	 *            带完全的保存路径的文件名
	 * @throws FileNotFoundException
	 * @throws IOException
	 * @throws Exception
	 */
	public static void object2Dat(Object object, String fileName)
			throws FileNotFoundException, IOException, Exception {
		// 创建输出文件
		File fo = new File(fileName);
		// 文件不存在,就创建该文件
		if (!fo.exists()) {
			// 先创建文件的目录
			String path = fileName.substring(0, fileName.lastIndexOf('.'));
			File pFile = new File(path);
			pFile.mkdirs();
		}
		FileOutputStream fs = new FileOutputStream(fileName);
		ObjectOutputStream oo = new ObjectOutputStream(fs);
		oo.writeObject(object);
		oo.flush();
		oo.close();
		fs.close();
	}

	/**
	 * 将DAT文件转换为object对象
	 * 
	 * @param objSource
	 *            DAT文件路径
	 * @return 返回对象
	 * @throws IOException
	 */
	@SuppressWarnings("unchecked")
	public static <T> T dat2Object(String objSource, Class<T> class1) {
		T object = null;
		FileInputStream fi = null;
		ObjectInputStream oi = null;
		try {
			fi = new FileInputStream(objSource);
			oi = new ObjectInputStream(fi);
			object = (T)oi.readObject();
		} catch (Exception e) {
			e.printStackTrace();
			object = null;
		} finally {
			try {
				oi.close();
				fi.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return object;
	}
}




                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值