﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-j2ee绿洲-文章分类-xstream</title><link>http://www.blogjava.net/livery/category/23470.html</link><description>找到属于自己的一片天空</description><language>zh-cn</language><lastBuildDate>Thu, 28 Jun 2007 19:00:34 GMT</lastBuildDate><pubDate>Thu, 28 Jun 2007 19:00:34 GMT</pubDate><ttl>60</ttl><item><title>XStream初体会</title><link>http://www.blogjava.net/livery/articles/125563.html</link><dc:creator>心情经纬</dc:creator><author>心情经纬</author><pubDate>Thu, 21 Jun 2007 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/livery/articles/125563.html</guid><wfw:comment>http://www.blogjava.net/livery/comments/125563.html</wfw:comment><comments>http://www.blogjava.net/livery/articles/125563.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/livery/comments/commentRss/125563.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/livery/services/trackbacks/125563.html</trackback:ping><description><![CDATA[<div>
<p><span roman="" new="" times="" mso-hansi-font-family="">首先到</span><span><a href="http://xstream.codehaus.org%e4%b8%8b%e8%bd%bdxstream/"><font color=#0033aa><font face="Times New Roman">http://xstream.codehaus.org</font><span roman="" new="" times="" mso-hansi-font-family=""><span>下载</span></span><font face="Times New Roman">XStream</font></font></a></span><span roman="" new="" times="" mso-hansi-font-family="">的最新版本，到目前为止的最新版本为</span><chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899" w:st="on"><span><font face="Times New Roman">1.1.2</font></span></chsdate><span roman="" new="" times="" mso-hansi-font-family="">，主要改变为提供了一些</span><span><font face="Times New Roman">JDK1.5</font></span><span roman="" new="" times="" mso-hansi-font-family="">的</span><span><font face="Times New Roman">enum</font></span><span roman="" new="" times="" mso-hansi-font-family="">类型支持。下载后，解压，将</span><span><font face="Times New Roman">xstream-1.1.2.jar</font></span><span roman="" new="" times="" mso-hansi-font-family="">与</span><span><font face="Times New Roman">xpp3_min-1.1.3.4.I.jar</font></span><span roman="" new="" times="" mso-hansi-font-family="">复制到项目的</span><span><font face="Times New Roman">lib</font></span><span roman="" new="" times="" mso-hansi-font-family="">中，此时就可以使用</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">了。</span><span><font face="Times New Roman">Xpp3</font></span><span roman="" new="" times="" mso-hansi-font-family="">为</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">提供的一个很有效率的</span><span><font face="Times New Roman">XML pull-parser</font></span><span roman="" new="" times="" mso-hansi-font-family="">实现，推荐使用，可以提高解析的效率。</span></p>
<p><span>
<p><font face="Times New Roman" size=2></font>&nbsp;</p>
</span>
<p>&#160;</p>
<p><font size=2><span roman="" new="" times="" mso-hansi-font-family="">一、<strong>首先，创建要转换的</strong></span><strong><span><font face="Times New Roman">Java</font></span></strong><strong><span roman="" new="" times="" mso-hansi-font-family="">类：</span></strong></font></p>
<p align=left><span><font face="Times New Roman" size=2>public class Person {</font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;private String firstname;</font></font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;private String lastname;</font></font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;private PhoneNumber phone;</font></font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;private PhoneNumber fax;</font></font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;// ... constructors and methods</font></font></span></p>
<p align=left><span><font face="Times New Roman" size=2>}</font></span></p>
<p align=left><span>
<p><font face="Times New Roman" size=2></font>&nbsp;</p>
</span>
<p>&#160;</p>
<p align=left><span><font face="Times New Roman" size=2>public class PhoneNumber {</font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;private int code;</font></font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;private String number;</font></font></span></p>
<p align=left><span><font face="Times New Roman"><font size=2>&nbsp;// ... constructors and methods</font></font></span></p>
<p align=left><span><font face="Times New Roman" size=2>}</font></span></p>
<p><font size=2><span roman="" new="" times="" mso-hansi-font-family="">注意</span><span roman="" new="" times="" mso-hansi-font-family="">：这里定义的属性都为</span><span><font face="Times New Roman">private</font></span><span roman="" new="" times="" mso-hansi-font-family="">，</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">不限制你的属性的可见性，默认所有属性都会进行转换；</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">不要求你必须要有</span><span><font face="Times New Roman">setter</font></span><span roman="" new="" times="" mso-hansi-font-family="">和</span><span><font face="Times New Roman">getter</font></span><span roman="" new="" times="" mso-hansi-font-family="">方法，也不要求你要有一个默认的类构造方法。</span></font></p>
<p><span>
<p><font face="Times New Roman" size=2></font>&nbsp;</p>
</span>
<p>&#160;</p>
<p><strong><font size=2><span roman="" new="" times="" mso-hansi-font-family="">二、初始化</span><span><font face="Times New Roman">XStream</font></span></font></strong></p>
<p><span roman="" new="" times="" mso-hansi-font-family=""><font size=2><font size=2>使用以下的语句进行初始化：</font></font></span></p>
<p><span><font size=2><font face="Times New Roman" size=2>XStream xstream = new XStream();</font></font></span></p>
<p><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">默认采用</span><span><font face="Times New Roman">Xpp3</font></span><span roman="" new="" times="" mso-hansi-font-family="">库，如果你不想使用</span><span><font face="Times New Roman">Xpp3</font></span><span roman="" new="" times="" mso-hansi-font-family="">这个库，你也可以使用一个标准的</span><span><font face="Times New Roman">JAXP DOM</font></span><span roman="" new="" times="" mso-hansi-font-family="">解析器，可以采用以下语句进行初始化：</span></font></font></p>
<p><font size=2><font size=2><span><font face="Times New Roman">XStream xstream = new XStream(new DOMDriver());&nbsp;//</font></span><span roman="" new="" times="" mso-hansi-font-family="">不需要</span><span><font face="Times New Roman">Xpp3</font></span><span roman="" new="" times="" mso-hansi-font-family="">库</span></font></font></p>
<p><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">此</span><span><font face="Times New Roman">xstream</font></span><span roman="" new="" times="" mso-hansi-font-family="">实例，为线程安全的，可以供多个线程进行调用，共享使用。</span></font></font></p>
<p><span>
<p><font size=2><font face="Times New Roman" size=2></font></font>&nbsp;</p>
</span>
<p>&#160;</p>
<p><font size=2><strong><font size=2><span roman="" new="" times="" mso-hansi-font-family="">三、注册要转换的类的别名</span></font></strong></font></p>
<p><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">初始化</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">后，我们要将要转换的类注册到</span><span><font face="Times New Roman">xstream</font></span><span roman="" new="" times="" mso-hansi-font-family="">中，告诉</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">，有哪些类要进行</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">转换，注册采用以下的语句：</span></font></font></p>
<p><span><font size=2><font face="Times New Roman" size=2>xstream.alias(&#8220;person&#8221;, Person.class);</font></font></span></p>
<p><span><font size=2><font face="Times New Roman" size=2>xstream.alias(&#8220;phonenumber&#8221;, PhoneNumber.class);</font></font></span></p>
<p><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">当然，这一步不是必须的，如果不进行注册的话，</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">默认会在转换时，将对应类全限定名也加入</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">文件中，如</span><span><font face="Times New Roman">com.test.Person</font></span><span roman="" new="" times="" mso-hansi-font-family="">，这如果在数据量大的时候，会使生成的</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">文件增大不少。</span></font></font></p>
<p><span>
<p><font size=2><font face="Times New Roman" size=2></font></font>&nbsp;</p>
</span>
<p>&#160;</p>
<p><font size=2><strong><font size=2><span roman="" new="" times="" mso-hansi-font-family="">四、将对象序列化为</span><span><font face="Times New Roman">XML</font></span></font></strong></font></p>
<p><font size=2><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">到这一步，我们就可以将一个</span><span><font face="Times New Roman">Java</font></span><span roman="" new="" times="" mso-hansi-font-family="">对象序列化为一个</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">文件了，我们先声明一个</span><span><font face="Times New Roman">Person</font></span><span roman="" new="" times="" mso-hansi-font-family="">对象，然后加入两条电话号码对象：</span></font></font></font></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>Person person = new Person("Chen", "Tao");</font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>joe.setPhone(new PhoneNumber(123, "1234-456");</font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>joe.setFax(new PhoneNumber(123, "9999-999");</font></font></font></span></p>
<p><font size=2><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">接下来，我们将此</span><span><font face="Times New Roman">Person</font></span><span roman="" new="" times="" mso-hansi-font-family="">对象转换为</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">字符串：</span></font></font></font></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>String xml = xstream.toXML(person);</font></font></font></span></p>
<p><font size=2><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">生成的</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">字符串为：</span></font></font></font></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>&lt;person&gt;</font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2>&nbsp;&lt;firstname&gt;Chen&lt;/firstname&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2>&nbsp;&lt;lastname&gt;Tao&lt;/lastname&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2>&nbsp;&lt;phone&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2><span>&nbsp;&nbsp;&nbsp; </span>&lt;code&gt;123&lt;/code&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2><span>&nbsp;&nbsp;&nbsp; </span>&lt;number&gt;1234-456&lt;/number&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2>&nbsp;&lt;/phone&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2>&nbsp;&lt;fax&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2><span>&nbsp;&nbsp;&nbsp; </span>&lt;code&gt;123&lt;/code&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2><span>&nbsp;&nbsp;&nbsp; </span>&lt;number&gt;9999-999&lt;/number&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman"><font size=2>&nbsp;&lt;/fax&gt;</font></font></font></font></span></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>&lt;/person&gt;</font></font></font></span></p>
<p><font size=2><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">就这么简单，什么映射文件都不用写，默认</span><span><font face="Times New Roman">XStream</font></span><span roman="" new="" times="" mso-hansi-font-family="">已经帮我们做好了。</span></font></font></font></p>
<p><span>
<p><font size=2><font size=2><font face="Times New Roman" size=2></font></font></font>&nbsp;</p>
</span>
<p>&#160;</p>
<p><font size=2><font size=2><font size=2><strong><span roman="" new="" times="" mso-hansi-font-family="">五、从</span><span><font face="Times New Roman">XML</font></span></strong><strong><span roman="" new="" times="" mso-hansi-font-family="">反序列化出对象</span></strong></font></font></font></p>
<p><font size=2><font size=2><font size=2><span roman="" new="" times="" mso-hansi-font-family="">而从一个</span><span><font face="Times New Roman">XML</font></span><span roman="" new="" times="" mso-hansi-font-family="">文件中反序列出一个对象也同样非常简单，我们看一下下面的代码：</span></font></font></font></p>
<p><span><font size=2><font size=2><font face="Times New Roman" size=2>Person newPerson = (Person) xstream.fromXML(xml);</font></font></font></span></p>
</div>
<img src ="http://www.blogjava.net/livery/aggbug/125563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/livery/" target="_blank">心情经纬</a> 2007-06-21 14:23 <a href="http://www.blogjava.net/livery/articles/125563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>