序列化对象与Xml转换分析报告文件状态:[√]草稿[]正式发布[]正在修改文件标识:SRT-XStream当前版本:Beta1.0作者:张涛完成日期:2012-8-03博雅-苹果事业部研发中心苹果事业中心研发部,《项目模块分析报告》作者:张涛Page2of10版本历史版本/状态作者参与者起止日期备注1.0张涛2012-8-1---2012-8-3序列化对象到Xml再返回的研究简要分析1.1张涛2012-8-7修改了Xml针对特殊字符造成的bug(改变xstream定制)------红色字体显著表示注:正文部分,只有最后一次变更的内容会以橙色加粗显示。蓝色下划线标注的为附带的文件及文本帮助,点击直接进入附录部分,只有最后一次变更的内容会以蓝色显示。(文字较多橙色刺眼)苹果事业中心研发部,《项目模块分析报告》作者:张涛Page3of10目目录录0.文档介绍............................................................................................................................40.1文档目的.......................................................................................................................40.2文档范围.......................................................................................................................40.3读者对象.......................................................................................................................40.4参考文献.......................................................................................................................40.5术语与缩写解释............................................................................................................41.序列化对象.........................................................................................................................52.IO流....................................................................................................................................53.XSTREAM读写XML.......................................................................................................64.读写TXT与XML对比....................................................................................................9苹果事业中心研发部,《项目模块分析报告》作者:张涛Page4of100.文档介绍0.1文档目的实现将数据库中存贮的对象序列化到Xml中去(包含图片的序列化),然后可以解析Xml再获取对象。0.2文档范围本文当适用于开发中或者开发后期数据库数据的倒库简要参考。0.3读者对象本文档预期读者对象为本项目组的开发人员,也可用于日后维护人员查询。0.4参考文献XStream完美转换Xml、JSON,CSND博客园hoojo;0.5术语与缩写解释缩写、术语解释XStreamxStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换苹果事业中心研发部,《项目模块分析报告》作者:张涛Page5of101.序列化对象将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。1、序列化目的:1)、以某种存储形式使自定义对象持久化2)、将对象从一个地方传递到另一个地方3)、使程序更具维护性2、对象序列化简要步骤:1)、创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流2)、通过对象输出流的writeObject()方法写对象。3、对象反序列化的步骤:1)、创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;2)、通过对象输入流的readObject()方法读取对象。2.IO流流是一个抽象的概念。当Java程序需要从数据源读取数据时,会开启一个到数据源的流。数据源可以是文件,内存或者网络等。同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。流的创建是为了更方便地处理数据的输入输出。流分为字节流和字符流。字节流也称为原始数据,需要用户读入后进行相应的编码转换。而字符流的实现是基于自动转换的,读取数据时会把数据按照JVM的默认编码自动转换成字符。字节流由InputStream和OutputStream处理,而字符流由Reader和Writer处理。Reader和Writer是Java后加入的处理类,出于让数据的处理更方便的目的.附录:JAVA-Io浅析(JAVAIo浅析参考文档)苹果事业中心研发部,《项目模块分析报告》作者:张涛Page6of103.Xstream读写Xml整体部署及测试概览应用框架:xStream框架准备jar包:项目一览:测试结果:将e盘目录下的6幅图片通过Io流将字节码写入Xml中通过解析Xml中对象Person属性photo的字节码生成图片到其他目录过程耗时:120+-10毫秒生成Xml预览:苹果事业中心研发部,《项目模块分析报告》作者:张涛Page7of10代码参考:实体类Person---AddressBook--PagePerson对象:AddressBook节点封装对象:Page页面对象节点封装:苹果事业中心研发部,《项目模块分析报告》作者:张涛Page8of10Util读写Xml方法类:定制Xml节点属性(改变定制修订了之前特殊字符造成的bug)方法名方法参数方法作用setXStream(XStreamstream)定制XmlmakeXML(Pagepage)根据定制和Page对象创建XmlwriteXML(Strings)将字节流写进Xml文件readXML2(InputStreamin)XStream解析XmlreadXML(InputStreamin)Dom4j解析Xml(注释掉的代码)Main主测试方法:实例一个对象:ListPersonlist=newArrayListPerson();for(inti=0;i6;i++){Personaddress=newPerson();address.setName(张+i);address.setAge(26);address.setSex(男);Stringfile1=e:/+i+.jpg;Stringcontent=Image.getRimg(file1);address.setPhoto(content.toString());list.add(address);}写XMl/**写Xml文件*/AddressBookaddes=newAddressBook();addes.setPersons(list);苹果事业中心研发部,《项目模块分析报告》作者:张涛Page9of10Pagepage=newPage();page.setAddressBook(addes);Util.writeXML(Util.makeXML(page));读XML4.读写Txt与XML对比项目做了两个解决方案:第一种:将图片字符流写入TXT文件,然后解析TXT进行对象的反序列化第二种:将图片字节流写入XMl文件,然后解析XML进行对象的反序列化两者采用上文提到的测试方法耗时存在差距读写TXT耗时180毫秒左右读写XML耗时120毫秒左右查阅了资料没有得到很好的答案,暂时没有见解!资料附带了两份项目,第一种对应项目:xstreamDemo第二种对应项目:xstreamDemo1导入之后在e盘根目录下放置6张图片作为测试直接运行Main类即可!附带了XStream的jar包,帮助文档,版本1.3.1的源码苹果事业中心研发部,《项目模块分析报告》作者:张涛Page10of10涉及链接附件均可在115网盘下载序列化对象与Xml转换(针对Xml特殊字符的bug修后).rar