加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XStream 通过对象流进行对象与xml的序列化和反序列化

发布时间:2020-12-16 01:52:55 所属栏目:百科 来源:网络整理
导读:对象实体: package cn.framework.t3;import java.util.ArrayList;import java.util.Date;import java.util.List;public class User {private int userId;private String userName;private String pwd;private ListUserLog logs=new ArrayListUserLog();priv

对象实体:

package cn.framework.t3;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class User {
	private int userId;
	private String userName;
	private String pwd;
	private List<UserLog> logs=new ArrayList<UserLog>();
	private Date lastVisted;
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public List getLogs() {
		return logs;
	}
	public void setLogs(List logs) {
		this.logs = logs;
	}
	public Date getLastVisted() {
		return lastVisted;
	}
	public void setLastVisted(Date lastVisted) {
		this.lastVisted = lastVisted;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ",userName=" + userName + ",pwd="
				+ pwd + ",logs=" + logs + ",lastVisted=" + lastVisted + "]";
	}
	
	
}

package cn.framework.t3;

public class UserLog {
	private int logId;
	private String ip;
	
	public int getLogId() {
		return logId;
	}
	public void setLogId(int logId) {
		this.logId = logId;
	}
	public String getIp() {
		return ip;
	}
	public void setIp(String ip) {
		this.ip = ip;
	}
	@Override
	public String toString() {
		return "UserLog [logId=" + logId + ",ip=" + ip + "]";
	}
	
	
}


XStreamUtils

package cn.framework.t3;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.Locale;

import org.apache.log4j.Logger;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;

public class XStreamUtils {
	private static final Logger logger=Logger.getLogger("cn.framework.t1.XStreamUtils");
	
	private static XStream xstream;
	static{
		logger.info("init xstream ...");
		//创建基于流非Dom方式的解析器来提供性能
		xstream=new XStream();
		
		/*******对生成的xml做一些设置*******/
		//设置别名,不设置将采用完全类名
		xstream.alias("User",User.class);
		xstream.alias("UserLog",UserLog.class);
		
		//设置类成员别名
		xstream.aliasField("id",User.class,"userId");
		
		//类的属性默认为xml的元素,现在修改为xml属性
		xstream.aliasAttribute(UserLog.class,"logId","lid");
		xstream.useAttributeFor(UserLog.class,"logId");
		
		//只保留集合内元素,去掉上级标签
		xstream.addImplicitCollection(User.class,"logs");
		
		//注册自定义转换器
		xstream.registerConverter(new DateConverter(Locale.SIMPLIFIED_CHINESE));
	}
	
	public static void objectToXML(User user) throws IOException{
		logger.info("do objectToXML ...");

		//创建一个PrintWriter对象用于输出
		PrintWriter pw = new PrintWriter("e:/out/xstream_user.xml");
		
		//选用一个HierarchicalStreamWriter实现类创建输出
		PrettyPrintWriter ppw = new PrettyPrintWriter(pw);
		
		//创建对象输出流
		ObjectOutputStream out = xstream.createObjectOutputStream(ppw);
		out.writeObject(user);
		out.close();
	}
	
	public static void xmlToObject() throws IOException,ClassNotFoundException{
		logger.info("do xmlToObject ...");
		//通过对象流进行输入操作
		FileReader fileReader = new FileReader("e:/out/xstream_user.xml");
		BufferedReader bufferedReader = new BufferedReader(fileReader);
		
		//创建对象输入流
		ObjectInputStream in = xstream.createObjectInputStream(bufferedReader);
		User user = (User) in.readObject();
		System.out.println(user);
	}
	
	
}

xstream=new XStream(); 这里创建XML解析器的方式与之前有所不同,之前是基于DOM方式创建的,现在是基于流方式创建的。


测试类:

package cn.framework.t3;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;

public class Test {

	public static void main(String[] args) throws ParseException,IOException,ClassNotFoundException {
//		User user = new User();
//		user.setLastVisted(new Date());
//		user.setPwd("123456");
//		user.setUserId(1);
//		user.setUserName("aaa");
//		
//		
//		UserLog userLog = new UserLog();
//		userLog.setIp("127.0.0.1");
//		userLog.setLogId(1);
//		user.getLogs().add(userLog);
//		
//		UserLog userLog1 = new UserLog();
//		userLog1.setIp("127.0.0.1");
//		userLog1.setLogId(2);
//		user.getLogs().add(userLog1);
//		
//		XStreamUtils.objectToXML(user);
		
		XStreamUtils.xmlToObject();
		
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读