源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Java对象的XML序列化与反序列化实例解析

  • 时间:2022-04-01 19:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Java对象的XML序列化与反序列化实例解析
上一篇文章我们介绍了[url=http://www.1sucai.cn/article/126252.htm]java实现的各种排序算法代码示例[/url],本文我们看看Java对象的xml序列化与反序列化的相关内容,具体如下。 [b]XML是一种标准的数据交换规范,可以方便地用于在应用之间交换各类数据。如果能在Java对象和XML文档之间建立某种映射,例如Java对象的XML序列化和反序列化,那么就可以使Java的对象方便地与其他应用进行交换。[/b] java.beans包里面有两个类XMLEncoder和Decoder,分别用于将符合JabaBeans规范的Java对象以XML方式序列化和反序列化。以下代码显示了如何使用这两个类实现Java对象的XML编码和解码。 [b]待序列化的Java类:[/b]
import java.io.Serializable;
public class SerialableObject implements Serializable 
{
 private static final long serialVersionUID = 8745578444312339136L;
 public SerialableObject() 
   {
 }
 public SerialableObject(int id, String name, double value) 
   {
  this.id = id;
  this.name = name;
  this.value = value;
 }
 public int getId() 
   {
  return id;
 }
 public void setId(int id) 
   {
  this.id = id;
 }
 public String getName() 
   {
  return name;
 }
 public void setName(String name) 
   {
  this.name = name;
 }
 public double getValue() 
   {
  return value;
 }
 public void setValue(double value) 
   {
  this.value = value;
 }
 private int id;
 private String name;
 private double value;
}
XML序列化和反序列化用法演示类:
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Vector;
public class XmlSerialize 
{
 public XmlSerialize() 
   {
 }
 public void serializeSingleObject(OutputStream os, Object obj)    // 序列化单个java对象 
 {
  // XMLEncoder xe = new XMLEncoder(os); 
  XMLEncoder xe = new XMLEncoder(os, "GBK", true, 0);
  // 仅用于Java SE 7 
  xe.writeObject(obj);
  // 序列化成XML字符串 
  xe.close();
 }
 public Object deserializeSingleObject(InputStream is)    // 反序列化单个Java对象 
 {
  XMLDecoder xd = new XMLDecoder(is);
  Object obj = xd.readObject();
  // 从XML序列中解码为Java对象 
  xd.close();
  return obj;
 }
 public void serializeMultipleObject(OutputStream os, List<Object> objs)    // 序列化多个Java对象 
 {
  XMLEncoder xe = new XMLEncoder(os);
  xe.writeObject(objs);
  // 序列化成XML字符串 
  xe.close();
 }
 public List<Object> deserializeMultipleObject(InputStream is)    // 反序列化多个Java对象 
 {
  XMLDecoder xd = new XMLDecoder(is);
  @SuppressWarnings("unchecked") 
     List<Object> objs = (List<Object>)xd.readObject();
  // 从XML序列中解码为Java对象列表 
  xd.close();
  return objs;
 }
 public void runSingleObject() 
   {
  File xmlFile = new File("object.xml");
  SerialableObject jo4Out = new SerialableObject(1, "Java序列化为XML", 3.14159265359);
  // 创建待序列化的对象 
  try 
     {
   FileOutputStream ofs = new FileOutputStream(xmlFile);
   // 创建文件输出流对象 
   serializeSingleObject(ofs, jo4Out);
   ofs.close();
  }
  catch (FileNotFoundException e) 
     {
   e.printStackTrace();
  }
  catch (IOException e) 
     {
   e.printStackTrace();
  }
  try 
     {
   FileInputStream ifs = new FileInputStream(xmlFile);
   SerialableObject jo4In = (SerialableObject)deserializeSingleObject(ifs);
   System.out.println("id: " + jo4In.getId());
   System.out.println("name: " + jo4In.getName());
   System.out.println("value: " + jo4In.getValue());
  }
  catch (FileNotFoundException e) 
     {
   e.printStackTrace();
  }
 }
 public void runMultipleObject() 
   {
  File xmlFile = new File("objects.xml");
  List<SerialableObject> sos4Out = new Vector<SerialableObject>();
  sos4Out.add(new SerialableObject(1, "Java序列化为XML - 1", 3.14));
  // 创建待序列化的对象 
  sos4Out.add(new SerialableObject(2, "Java序列化为XML - 2", 3.14159));
  // 创建待序列化的对象 
  sos4Out.add(new SerialableObject(3, "Java序列化为XML - 3", 3.1415926));
  // 创建待序列化的对象 
  sos4Out.add(new SerialableObject(4, "Java序列化为XML - 4", 3.141592653));
  // 创建待序列化的对象 
  sos4Out.add(new SerialableObject(5, "Java序列化为XML - 5", 3.14159265359));
  // 创建待序列化的对象 
  try 
     {
   FileOutputStream ofs = new FileOutputStream(xmlFile);
   // 创建文件输出流对象 
   serializeSingleObject(ofs, sos4Out);
   ofs.close();
  }
  catch (FileNotFoundException e) 
     {
   e.printStackTrace();
  }
  catch (IOException e) 
     {
   e.printStackTrace();
  }
  try 
     {
   FileInputStream ifs = new FileInputStream(xmlFile);
   @SuppressWarnings("unchecked") 
        List<SerialableObject> sos4In = (List<SerialableObject>)deserializeSingleObject(ifs);
   for (SerialableObject jo4In : sos4In) 
        {
    System.out.println("id: " + jo4In.getId());
    System.out.println("name: " + jo4In.getName());
    System.out.println("value: " + jo4In.getValue());
   }
  }
  catch (FileNotFoundException e) 
     {
   e.printStackTrace();
  }
 }
 public static void main(String[] args) 
   {
  XmlSerialize xs = new XmlSerialize();
  xs.runSingleObject();
  xs.runMultipleObject();
 }
}
需要注意的是,待序列化的类必须要符合JavaBeans的格式规范,即:具有一个无参的public构造函数,所有数据成员的访问均采用getter/setter模式,此外,这个类必须是public的,并且实现了java.io.Serializable接口。 [b]程序运行之后,会产生两个文件:[/b] object.xml是runSingleObject方法生成的,存放了单个的SerialableObject的值:
<?xml version="1.0" encoding="GBK"?> 
<java version="1.7.0" class="java.beans.XMLDecoder"> 
 <object class="SerialableObject"> 
 <void property="id"> 
  <int>1</int> 
 </void> 
 <void property="name"> 
  <string>Java序列化为XML</string> 
 </void> 
 <void property="value"> 
  <double>3.14159265359</double> 
 </void> 
 </object> 
</java>  
objects.xml是runMultipleObject方法产生的,存放了5个SerializableObject的值:
<?xml version="1.0" encoding="GBK"?> 
<java version="1.7.0" class="java.beans.XMLDecoder"> 
 <object class="java.util.Vector"> 
 <void method="add"> 
  <object class="SerialableObject"> 
  <void property="id"> 
   <int>1</int> 
  </void> 
  <void property="name"> 
   <string>Java序列化为XML - 1</string> 
  </void> 
  <void property="value"> 
   <double>3.14</double> 
  </void> 
  </object> 
 </void> 
 <void method="add"> 
  <object class="SerialableObject"> 
  <void property="id"> 
   <int>2</int> 
  </void> 
  <void property="name"> 
   <string>Java序列化为XML - 2</string> 
  </void> 
  <void property="value"> 
   <double>3.14159</double> 
  </void> 
  </object> 
 </void> 
 <void method="add"> 
  <object class="SerialableObject"> 
  <void property="id"> 
   <int>3</int> 
  </void> 
  <void property="name"> 
   <string>Java序列化为XML - 3</string> 
  </void> 
  <void property="value"> 
   <double>3.1415926</double> 
  </void> 
  </object> 
 </void> 
 <void method="add"> 
  <object class="SerialableObject"> 
  <void property="id"> 
   <int>4</int> 
  </void> 
  <void property="name"> 
   <string>Java序列化为XML - 4</string> 
  </void> 
  <void property="value"> 
   <double>3.141592653</double> 
  </void> 
  </object> 
 </void> 
 <void method="add"> 
  <object class="SerialableObject"> 
  <void property="id"> 
   <int>5</int> 
  </void> 
  <void property="name"> 
   <string>Java序列化为XML - 5</string> 
  </void> 
  <void property="value"> 
   <double>3.14159265359</double> 
  </void> 
  </object> 
 </void> 
 </object> 
</java> 
[b]总结[/b] 以上就是本文关于Java对象的XML序列化与反序列化实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:[url=http://www.1sucai.cn/article/125931.htm]Java编程redisson实现分布式锁代码示例[/url]、[url=http://www.1sucai.cn/article/125927.htm]Java编程ssh整合常见错误解析[/url]等,有什么问题可以随时留言,小编会及时回复大家的。下面推荐几本Java编程相关的书籍,供大家参考,免费下载哦: 写给大忙人看的Java核心技术 ([美]凯·S·霍斯特曼) 中文pdf扫描版 [url=http://www.1sucai.cn/books/556994.html]http://www.1sucai.cn/books/556994.html[/url] java Vector类源代码与分析 WORD版 [url=http://www.1sucai.cn/books/549902.html]http://www.1sucai.cn/books/549902.html[/url] 希望大家能够喜欢,更多精彩内容尽在:[url=http://www.1sucai.cn/]http://www.1sucai.cn/[/url]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部