XML字符串与对象的相互转换

package com.metarnet.collect.senddata;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

/**
 * <title>使用XML文件存取可序列化的对象的类</title> <description>提供保存和读取的方法</description>
 * 
 * @author 殷晋 <copyright>清华大学汽车工程开发研究院@2005</copyright>
 * @author 王豪杰
 * @version 1.0 2005-8-5 16:44:49
 */
public class ObjectToXMLUtil {
	/**
	 * 把java的可序列化的对象(实现Serializable接口)转化成XML字符串,如果想一次保存多个可序列化对象请用集合进行封装
	 * 
	 * @param obj
	 *            要序列化的可序列化的对象
	 * @return 转化好的XML格式字符串
	 */
	public static String objectXmlEncoder(Object obj) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		// 创建XML文件对象输出类实例
		XMLEncoder encoder = new XMLEncoder(baos);
		// 对象序列化输出到XML文件
		encoder.writeObject(obj);
		encoder.flush();
		encoder.close();

		// 关闭序列化工具
		try {
			//关闭流
			baos.close();
			//因为我的应用需要经过web传输,所以要对特殊字符做下处理
			return java.net.URLEncoder.encode(baos.toString("UTF-8"), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 将objStr中的XML格式字符串转换成对象列表(必须存在要转化对象对应的类以及类所在的包,并且该类实现了Serializable接口),返回的结果经过了List封装
	 * 
	 * @param objStr
	 *            包含了对象信息XML格式的字符串
	 * @return 由XML字串里面保存的对象构成的List(可能是一个或者多个的序列化保存的对象)
	 */
	public static List objectXmlDecoder(String objStr) {
		List objList = new ArrayList();
		ByteArrayInputStream bis = null;

		try {
			bis = new ByteArrayInputStream(objStr.getBytes("UTF-8"));
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		XMLDecoder decoder = new XMLDecoder(bis);
		Object obj = null;
		try {
			while ((obj = decoder.readObject()) != null) {
				objList.add(obj);
			}
		} catch (Exception e) {
		}

		try {
			bis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		decoder.close();
		return objList;
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值