开发者社区> 技术小阿哥> 正文

XML格式对象序列化(2)

简介:
+关注继续查看

XStreamJava.BeanXML工具的比较

 

       XStream主要作用是将序列化的对象转化为一个XML文件或将XML文件解析为一个对象。当然并非只有它可以做到,很多其它工具一样可以,在Java中存在这样两个类XMLDecoderXMLEncoder,它们是在Java.Bean包下的,它们的作用是将JavaBean转化为XML或将XML文件转化为一个Java Bean

       XMLDecoder是通过一个输入流将对象从输入流中取出并转化为一个实例的方法。它所需要的就是一个输入流及一个转化过程。

 

       XMLDecoder的实例:

 

       String fileStr=”xstream.xml”;//XML文件,在本目录下,延用上次使用文件。

       ObjectInputStream in=new ObjectInputStream(new FileInputStream(fileStr));//创建一个ObjectInputStream用于输入。

       XMLDecoder xmld=new XMLDecoder(in);//创建一个XMLDecoder对象。

       延用前面所使用PrintUnit这个Bean

       PrintUnit pu=(PrintUnit)xmld.readObject();//通过XMLDecoder中的readObject方法获得PrintUnit对象。

如果获取到了这个对象那么pu中将有它的值a=A11,b=B22,c=C33。整个过程最好放try

…catch中去,能够捕获一些如:文件不存在等异常。

       从操作方式上看XMLDecoder似乎不比XStream差多少,同样是可以通过ObjectInputStream获取XML文件中的对象。它们的差异就是解析的方式不同,XMLDecoder是使用Java自带的XML解析方式,而XStream则是可以自定义的,它可以使用多中方式进行解析。这些是我个人所发现的一些不同点。

 

       XMLEncoder是通过一个输出流将对象序列化并输出为XML文件。它所需要的是一个输出流及一个输出方式。

 

       XMLEncoder的实例:

 

       String fileStr=”xstream.xml”;//定义一个输入的目标文件。

       ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(fileStr));//创建一个对象输出流。

       XMLEncoder xmle=new XMLEncoder(out);//创建一个XMLEncoder对象。

       延用前面所使用PrintUnit这个Bean

//创建并初始化PrintUnit对象。

PrintUnit pu=new PrintUnit();

pu.setA(“AAA”);

pu.setB(“BBB”);

pu.setC(“CCC”);

 

       xmle.writeObject(pu);//使用XMLEncodewriteObject方法输出pu

       xmle.flush();//刷新

       xmle.close();//关闭输出流

 

       从上面的代码不难看出,使用XMLEncode方式将对象序列化并输出也是很方便的,简单调用writeObject方法能将普通Bean输出为XML文件。

      

       XML文件的内容:

 

�_ <?xml version="1.0" encoding="UTF-8"?>

<java version="1.5.0" class="java.beans.XMLDecoder">

 <object class="test.PrintUnit">

  <void property="a">

   <string>AAA</string>

  </void>

  <void property="b">

   <string>BBB</string>

  </void>

  <void property="c">

   <string>CCC</string>

  </void>

 </object>

w   </java>

 

       不知道是我哪里没有处理,还是实际并不是像我想象的哪么简单,使用XMLEncoder所输出的XML文件中有一定的问题,虽然它很详细,比起XStream所生成的更多,包括了XMLJava的版本看上去更像是个完整的XML文件,不过再细看它们两生成的XML格式内容,完全不同,这个我想就是它们最大的区别。这让我想到了很多内容:工作方式,解析器,转换方式等。大家有没发现在开始和结束都存在一些乱码数据,难道在XMLEncoder输出过程中或数据转换中内容已经存在“脏”数据了?还是我所使用的输出方式存在问题?哎一个又一个问题出现了。我想我需要再进一步的研究和学习才能得到答案。

       不过尽管有这个那个的问题,使用Java本身自带的XML工具还是一样很实用的,读取和输出一样可用,操作也很灵活。因此我觉得在某些场合使用特定的工具可能会更好,利用XMLEncoderXMLDecoder同样可以解决一些问题。

 

 

XStream 有三个突出的优点:

  1. XStream 不关心序列化/逆序列化的类的字段的可见性。
  2. 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
  3. 序列化/逆序列化的类不需要有默认构造函数。

不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类。




本文转自 dogegg250 51CTO博客,原文链接:http://blog.51cto.com/jianshusoft/760678,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ajax请求json和xml数据及对json和xml格式数据的解析
ajax请求json和xml数据及对json和xml格式数据的解析
29 0
【SoapUI、Postman、WebServiceStudio、Jmeter】接口测试工具结合测试webservice接口(发送XML格式参数)
【SoapUI、Postman、WebServiceStudio、Jmeter】接口测试工具结合测试webservice接口(发送XML格式参数)
24 0
XML格式的感兴趣区文件转为ROI格式
本文介绍在ENVI软件中,将用户自行绘制的.xml格式的感兴趣区(ROI)文件转换为.roi格式的方法~
25 0
使用dom4j工具:设置输出两种xml格式-紧密型和美观型
今天学习使用不知名大佬的domj4 jar包以及用到的几个其他的包,来简单写一个xml
58 0
目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式
目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式
87 0
Open Office XML 格式中的 Style 设计原理
Open Office XML 格式中的 Style 设计原理
39 0
SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser
SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser
54 0
技术分享 | 接口自动化测试中如何对xml 格式做断言验证?
在服务端自动化测试过程中,发起请求之后还需要对响应值进行验证,验证响应信息符合预期值之后,这一条接口自动化测试用例才算完整的通过。所以这一章节,将会讲解在接口自动化测试中,是如何对服务端返回的 XML 格式响应内容做断言验证。
93 0
xml注释格式
牙叔教程 简单易懂
37 0
编写Java程序,使用 dom4j 解析上一节王者荣耀“英雄”对应的Xml文件数据内容,打印输出,具体格式
编写Java程序,使用 dom4j 解析上一节王者荣耀“英雄”对应的Xml文件数据内容,打印输出,具体格式
90 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载