XStream支持JDK1.3及以后的版本
XStream有两U运行模式:?/SPAN>Java模式和增强模式?/SPAN>
在存Java模式下,XStream在不?/SPAN>JVM中的q行是一LQ但׃不同JVM?/SPAN>reflection机制的支持有所差异Q会D一些类或字D将无法序列化?/SPAN>
在增强模式下Q?/SPAN>XStream没有上述限制Q然而这U模式ƈ不被所有的JVM所支持?/SPAN>
目前Sun?/SPAN>Apple、和HP?/SPAN>JVM 1.4或更新的版本支持增强模式。所有的JVM均支持以?/SPAN>Java模式q行?/SPAN>
仅以Sun JDK 1.4Z说明两种模式下,XStreamq行的差异?/SPAN>
功能 ?/SPAN>Java模式 增强模式
公有c?/SPAN> YES YES
非公有类 NO YES
静态内部类 YES YES
非静态内部类 NO YES
匿名静态内部类 NO YES
无缺省构造函?/SPAN> NO YES
有缺省构造函?/SPAN> YES YES
Private字段 YES YES
Final字段 NO YES
参考下面的代码CZQ?/SPAN>
class Person {
private String name;
private List toys = new ArrayList();
// ...
}
class Computer {
String type;
}
class Car {
String color;
}
xstream.alias("person", Person.class);
xstream.alias("computer", Computer.class);
xstream.alias("car", Car.class);
Person person = new Person("Joe");
person.addToy(new Computer("apple"));
person.addToy(new Computer("spectrum"));
person.addToy(new Car("blue"));
String xml = xstream.toXML(joe);
CZq回l果Q?/SPAN>
<person>
<name>Joe</name>
<toys>
<computer>
<type>apple</type>
</computer>
<computer>
<type>spectrum</type>
</computer>
<car>
<color>blue</color>
</car>
</toys>
</person>
不必
可以
当对象新增加一个字D|Q?/SPAN>XStream在反序列化旧版本的对象时Q会忽略q个新增的字D,不作M处理?/SPAN>
当对象删除一个字D|Q?/SPAN>XStream在反序列化旧版本的对象(包含该字D)Ӟ会抛出异怿息?/SPAN>
如果对象的字D|名了Q将被视作删除了一个字D,然后再新增一个字Dc?/SPAN>
对于更高U别的类ULQ我们在发送信息到XStream之前Q必要?/SPAN>XML对象q行预处理?/SPAN>
XStreamq在不断的开发过E中Q相信在未来的版本中Q上q操作会更成熟,更容易?/SPAN>
上个世纪90q代初,Gosling发vqg一个名为Green的项目,此项目最l演变ؓJava。Java 的基本理忉|创造一U可以在不需修改的情况下执行在各U运设备上的程序。例如,一个装备了Java虚拟机器的手机游戏Y件也应该可以在别的手Z使用?
q去十年Q这Ҏ术nl百战。早期的合作伙伴微Y发现JavaE序的^台无x对Windows带来不利Q于是稍做修改,另创适合Windows的Java版本Q从而引发了七年的官司。由于消Ҏ设备、PC及服务器需要有不同的JavaQSun一直努力想扑ֈ合适的Ҏ与其他各方分享Java的掌控权。以至于到现在,包括IBM在内的许多公叔R在不断呼吁Sun开放JavaM部分的源码?
管如此QJava已经在计机领域站稳脚跟。Sun首席执行官Scott McNealy可能q是会发布冠冕堂皇的演说Q但在上周二Sun JavaOne大会上他的一番讲话话却十分中肯,他说Q“七、八q前的JavaOne演说现在听v来真是寒,我们那时实在是太看它了。我们根本不知道q项技术要做什么。?
Gosling全程参与了JavaOne上周的活动,现在的他头发已经qQ但牛仔裤、T恤衫和Birkenstockq动鞋的装束始终未变。“他看来像是一个老嬉皮,”Gosling的女儿在周二大会的媄片中现n说法Q惹得这位知天命的Java教父在台上满脔R红?
以下是Gosling畅谈Java理念的记录?
问:在Java的设计之初,你心中有惛_q它会是什么样子吗Q?
GoslingQ回惌计Green目的时候,我们寚wq未来大谈了许多。我们曾写过一本很多场景组成的册子,许多Java设计都是依据q些场景构想出来的。我觉得那比较像是科qd说的做法Q你从来都不知道世界会走向何方,你可以Q意预技术的发展Q但惌归想象,和实际还是有很大差距的。我非常怿摩尔定律会成为现实,轻而易丑֜而把一个个的点q成一了快速传播信息的|络?
我大胆预许多科技一定会那样发展Q当然会只是存在安全、可靠及便携{方面的问题。我们参与对q些问题的绝大部分给出答案,最后的l果一定会让大家惊奇万分?
问:最初,你的Green目不是把重Ҏ在消Ҏ电子设备上吗?
GoslingQ项目设计初期,我们p很多旉和各界h士交谈,我们看到同样的问题发生在消费性电子设备、新兴手机及嵌入式控制系l领域。我们和甉|、机车、电力控制系l的刉商及汽车界的工作h员交谈过。我们也和VCR和电视机开发商交流q。在Green目初期Q我们决定做个原型,我们必须把精力集中在q一点,我们选择了消Ҏ电子设备,很大E度上是因ؓq个领域更有?
虽然许多人都觉得很这个计划有意思,但我们还是疑惑是不是能把q个计划用在自我支持上?差不多同时期Q时代华Uؓ全方位服务网l公开招标Q那正是我们梦寐以求的事──|络q到家庭、在|络上传递语韛_影像、内容互动等{。“是的!q正是我们想要的Q是我们Z奋斗的目标!”于是我们就一头扎了进来?
问:那实际上是在互动电视的发展初期吧Q?
GoslingQ没错,那真是一个具有远见的计划。很多h都说Q“我们也惌样做。?
时代华纳的计划因为各U原因后来变得十分奇怪,我们没能拿下他们的标。回惌v来,我还很庆q我们那时输了。赢家SGI后来不知׃多少钱做那个单子Q但没得到多大回报?
问:你认为Java是用在这U狭H领域上的技术呢Q还是可能深入到在整个电脑业的技术?
GoslingQ我们ƈ没有计划要把它推向整个业界,但我们看到整个业在做类似的事,每个pȝ内部都装有数码控制器。但是存在着严重的相互操作性问题,所有东襉K在相互整合,q事实引起了我们的注意。就像你站在暴力赛R场外看到所有R子都在朝竞赛Z心开去,一定会撞成一团糟?
问:Java解决了相互操作性的问题Q但微Y另辟y径创出?NetQ引发了更高层的兼容性问题。有什么方法可以把.Net 及Java整合h吗?
GoslingQ某U程?比如Web services)Q就像一座桥梁。但是我们不能把不愿融在一L东西往一块拉。微软很明显地就是想要走自己的\Q他们向来喜Ƣ标新立异。他们曾作ؓJavaC里非怼U而可q成员Q可惜只持箋了半q多Q后来他们认样不好?
问:那是1995q还1996q的事吧Q?
GoslingQ应该是?996q。共同合作双方的意向。对微Y而言q是一个长期的教育q程Q他们好像不太喜Ƣ这U方式。他们貌似在跟你走更q,例如我们之间合作开发了不少不错的品,但其实彼此间q隔了一步之遥。我们之间的有共通点Q像Web services或相互操作性,都是很好的说明?
问:你们不能把用C#开发成?NetE序上融入到Java虚拟机器中吗Q?
GoslingQ我们的差别在于他们大量使用q种不安全的方式Q但我坚册Z应该用不安全的方式?BR>
问:不安全?您的意思是…?
GoslingQ源代码有受的和不受管的之分。受源代码是可以确保安全与E_性的Q而不受管的源代码你无法保证什么。有时正的做法也会引v内存损害Q程序运作十分不Ҏ分析。CE序是一U不受管E序Q可能莫名其妙就挂了Q最后造成安全上的重大影响。用C语言Q你可以假造事物的w䆾Q但用JavaQ是l不容许伪造n份的?/FONT>
问:微YZ么想加入Java Community Process(JCP)Q?
GoslingQ我不清楚,你可以问问Sun 首席技术官Greg Papadopoulos?
问:你希不希望看到双方回到当初半q多的密切合作状态?
GoslingQ我很期待看C们和JCP其他成员合作?
问:你们刚把Java应用服务器Y件作为玻璃鱼开放源码,是不是也有可能把Java标准?Java SEQJava的基)开源发布?
GoslingQ或怼的。我们过MؓJava SE做的一切和开放源代码其实差不多,主要差别只是在于我们的授权要求要有测试。在做过调查后,我们认ؓ试是非帔R要的。但开源界人士一斚w说他们会接受试Q另一斚w又说他们只是不同意测试。我们可能有一天会开放Java SE的源代码Q主要得考虑怎么做比较好?
有很多事让我们十分紧张。许多h都有q用JavaScript的经验,不同JavaScript间也存在相当严重的相互操作性问题,对网制作者来说是一大梦。Java界的人都得拿着JavaScript手册才能做事Q真是太可怕了?
问:像BEA{公怼加入一些东西得JavaE序只有在他们的应用服务器上才能执行Q到头来Java也会变得不可携,是这L吗?
GoslingQ没错,q的是个问题。但臛_Q这q只是在特别功能上而已。Java有个包命?package naming)工具。当用APIӞ你得x用的是公开标准的API──像Java{──或是某公司的专有API──例如com.beaQ作Z个开发者就一定要十分心。开发h员真得很在乎可携性,每次使用com.bea你会觉得很难受。JavaScript的一个困隑ְ是无法判断你用的是不是某个浏览器专用的功能?
另外Q事情也会演变成某个应用伺服器厂商具有一些想法,而大安觉得不错Q这个想法就会送到JSR(Java Specification request)Q那么这家厂商第二或W三版本也会是在标准的Java框架内?
问:N不能在开放Java源代码后通过品牌名称来控制兼Ҏ吗Q比如说Q要求在其Java名称被充许前Q就取得认证Q?
GoslingQ这Ҏ们做q许多讨论。Sun是一个十分民ȝ公司Q有个方法可行,有h反对Q目前反对者占多数?
问:你持反对观点吗?
GoslingQ我有时是站在赞成的一方,不过我得承认我常常反复不定?
问:能将五年前的Java技术和今天的做一比较吗?
GoslingQ最大的差别在于Java已经变成许多大型的关键的pȝ的中心,q就需要保守一炏V当你的pȝ是一个每晚结数百亿W交易的银行pȝӞ小一个bug也会酿成巨祸。早期我们有很多异想天开的点子,但现在我们得考虑到哪些h会受到我们媄响。现在一切都要考虑周全才行?
问:通过Groovy{项目,Sun正在让Java世界和脚本语a走得更近Q但坦白讲我不太清楚~程语言和像PHP、Perl、Pythonq样的脚本语a有什么不同?
GoslingQ你的困惑其实是有根据的。世界上有太多松散的语言Q给不同人提供不同的用途?
当h们提到脚本语aӞ往往惛_的是可以很快让开发h员把东西拼凑好,很快拿出去跟客户做演C。程序的性能怎么栗扩充性如何,或是能不能徏成一个大pȝ到在其次才考虑。但在Java设计上,我们不太在乎能不能很快写成一个程序出门去做演C,我们在乎的是能不能很快写成一个大型的h良好扩充性的E序Q到最后我们做的决定往往比较困难实现。一般来Ԍ在设计上Q脚本语a比编E语a要容易?
Java设计有两个层ơ:Java虚拟机和Java语言。难点在Java虚拟机及其以下的部分。如果把脚本语言用在Java虚拟ZQ就可以兼得两者的优点?
问:你是q么做吗Q?
GoslingQ是的。Groovy开发的东西可以获得所有的Java库,Java应用也可以用Groovy?/FONT>