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