关于XMLEncoder和XMLDecoder

本文介绍使用XMLEncoder和XMLDecoder进行Java对象的序列化和反序列化过程。重点讲解了如何避免使用有参构造函数导致的异常,并通过set方法成功实现对象状态的保存与恢复。

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

我们用XMLEncoder和XMLDecoder来序列化和反序列化一个类。

我觉得需要注意的是,我们在new一个对象的时候,XMLEncoder本身默认的是类中无参的构造函数,我今儿在实现的时候,老是报出exception,原来是我用有参的构造函数new了对象,改成set方法设置值,就ok了。

需要序列化的类:

package com.test.Bean;

import java.io.Serializable;

public class Customer implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String name;
	private int age;
	public Customer(){
		
	}
	
	public Customer(String name, int age){
		this.name = name;
		this.age = age;
		
	}
	
	public String toString(){
		return "name=" + name + ", age=" + age;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

  XMLEncoder和XMLDecoder的工具类:

package com.test.Serializable;

import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;

public class BeanXML {
	
	public static String encodeBean(Object bean){
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		XMLEncoder encoder = new XMLEncoder(out);
		encoder.writeObject(bean);
		encoder.close();
		return out.toString();
	}
	
	public static Object decodeBean(String xml){
		XMLDecoder decoder;
		try {
			decoder = new XMLDecoder(new ByteArrayInputStream(xml.getBytes("GBK")));
			return decoder.readObject();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

}

 测试类:

package com.test.Serializable;
import com.citi.test.Bean.Customer;

public class TestBeanXML {
	
	public static void main(String[] args){
		Customer customer = new Customer();
		customer.setName("Ruth");
		customer.setAge(10);
		BeanXML testBeanXml = new BeanXML();
		testBeanXml.encodeBean(customer);
		//testBeanXml.decodeBean("ruth.xml");
		System.out.print(testBeanXml.encodeBean(customer));
		
//		testBeanXml.decodeBean(testBeanXml.encodeBean(customer));
//		System.out.println(testBeanXml.decodeBean(testBeanXml.encodeBean(customer)).getClass());
		
		Customer cust = (Customer) testBeanXml.decodeBean(testBeanXml.encodeBean(customer));
		System.out.print(cust.getName()+cust.getAge());
	}

}

  测试结果:

 

转载于:https://www.cnblogs.com/ChristyorRuth/p/3545924.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值