首页 > 学院 > 开发设计 > 正文

XStream使用

2019-11-08 00:34:12
字体:
来源:转载
供稿:网友

package com.example.xstreamdemo;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import android.app.Activity;import android.os.Bundle;import com.example.xstreamdemo.commonutil.GetContextUtil;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;public class MainActivity extends Activity {	/*	 * Xstream是一种OXMaping技术,是用来处理xml文件序列化的框架,在将JavaBean序列化或将XML文件反序列化的时候	 * 不需要其他辅助类和映射文件,使得XML序列化不在繁琐。Xstream也可以将JavaBean序列化成Json或反序列化。	 */	/*	 * 问题描述	 * 1、XStream官网下载最新xstream-1.4.9.jar拷贝到lib目录下刷新工程出现如下错误	 * 出现Conversion to Dalvik format failed with error 1 	 * 解决方法 改变导包方式Build path  configure Build Path……  Libraries  Add Exteral JARS……错误消失	 * Run as报错java.lang.NoClassDefFoundError:com.throught.xstream.XStream	 * 解决方法将低版本的xstream-1.4.2.jar复制到lib目录下刷新Run as成功(尝试以Build path……方式导入1.4.2依然报NoClass……)	 * 2、xml反序列化时出现Cannot construct com.example.xstreamdemo.person as it does not have a no-args 	 * constructor 解决方法在Person类中加入无参构造器	 */	PRivate XStream xStream;	private ObjectOutputStream out;	private ObjectInputStream in;	@Override	protected void onCreate(Bundle savedInstanceState){		super.onCreate(savedInstanceState);		GetContextUtil.setContext(this);		setContentView(R.layout.activity_main);		Person person=new Person("张三",23);				// 导入xstream包 objectXML序列化		xStream=new XStream();		/*		 * xStream.aliaspackage()包重命名		 *        .alias()类重名		 *        .aliasField()字段重命名		 */		xStream.aliasField("姓名", Person.class,"name");		String object2xml=xStream.toXML(person);		System.out.println(object2xml);		//objectXML反序列化		person=(Person)xStream.fromXML(object2xml);		System.out.println(person);		try {			objectSerialize();		} catch (Exception e) {			// TODO Auto-generated catch block			e.printStackTrace();		}				/*		 * 导入jettison-1.0.1.jar包Run as出现错误java.lang.verifyerror……没有解决		 * xStream=new XStream(new JettisonMappedXmlDriver());		 * xStream.setMode(XStream.NO_REFERENCES);		 */		xStream=new XStream(new JsonHierarchicalStreamDriver());		String object2json=xStream.toXML(new Person("王五",23));		System.out.println(object2json);		/*		 * 使用jsonhierarchicalstreamdriver驱动无法json2object		 * person=(Person)xStream.fromXML(object2json);		 * logger.info(person);		 */			}	// 直接在方法上抛出异常可减少使用try……cache语句	private void objectSerialize() throws Exception{		/*		 * 对象序列化就是把对象变为二进制的数据流,通过对象序列化可以很方便的进行对象的传输和存储,对象序列化只需对象所在类		 * 实现java.io.Serializable接口,通过objectoutputstream实现对象序列化输出,objectinputstream对象		 * 反序列化输入		 * 		 * XStream对象输入输出不需要实现接口,同样通过对象输入输出流进行输入输出		 */		//文件不存在则会自动创建		File file=new File(GetContextUtil.getContext().getFilesDir()+File.separator+"XStream.txt");	    out=xStream.createObjectOutputStream(new FileOutputStream(file));		out.writeObject(new Person("李四",23));		//若不关闭输出流内容没有写入		out.close();	    if(file.exists()&&file.length()!=0){		    in=xStream.createObjectInputStream(new FileInputStream(file));			System.out.println(((Person)in.readObject()));			in.close();	    }	}}

源码下载地址:http://download.csdn.net/detail/grow_up_footstep/9762393


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表