.NET和JAVA的跨平台,我们很期望,其实不容易。
Java最吸引人之处,在于跨平台。而.NET可以看作Java的改良版,囊括Java大部分的优点,所以当然也具有跨平台的潜力。但是认真追究起来,Java和.NET的程序其实也不算真正跨平台,因为Java VM(虚拟机器)和.NET VM本身就是一个平台,而Java程序只能在Java VM上执行,.NET程序只能在.NET VM上执行,至于VM的底下是什么操作系统,则无关紧要。
更清楚的说,Java和.NET的跨平台,指的是跨“操作系统”平台。所以,Java VM和.NET VM能移植到什么OS平台,Java程序和.NET程序就能跨到什么平台。从1.0版至今,Java历经了近八年的发展,Java已经无所不在了。除了在服务器上已经取得压倒性的胜利之外,在桌面系统的安装比例也已经超过90%(2002年的数据),且随着最近Dell等大厂和Sun签约在PC上预先安装Java VM,此数据未来会更高。
但事实上,Java跨平台的开放程度并不若我们所想象的美好,主要的原因在于“四不一没有”:
版本不一致:许多操作系统上虽然已经具备Java VM,但是版本并未和最新版的Java VM同步,甚至不同版本差距颇大者。举例来说,早期Mac OS在追随Java的脚步上,步伐很慢,往往差了一个版本,例如在Java 1.3推出一、二年后,Mac OS仍只有1.2版的Java VM可用(但是现在Mac OSX已经追上Java的版本推进)。另外,Java VM安装比例固然已经超过90%,但是其中应该有许多仍是使用IE浏览器内建的Microsoft VM(只支持到Java 1.1.4 API),不能执行1.2以后的Java 2程序。所幸的是,版本落差这个问题近来已经有显著的改善。
特殊动态链接库不存在:对于那些非J2SE标准的动态链接库(例如Java 3D),往往只局限在Window、Solaris、Linux三个操作系统。关于这一点,我不认为未来几年内会有所改善。
标准不够开放:Sun曾经把Java提交给ISO来制订开放的标准,但后来又因为舍不得而撤回,改成立JCP委员会为Java的标准制订单位。这也使得Java在开放程度上并未如宣传上所说的那么好。(这一方面,.NET还比Java好一些,至少核心部分已经是ECMA的标准)。
厂商不服气:这可能会造成标准的分裂。早期微软在Visual J++产品中就有一些可能造成Java分裂的举动出现。近年来关于IBM和JBoss等公司,在J2EE的产品上,和Sun也是屡次发生冲突。甚至之前传出某公司有利用市场的力量,另立标准的可能。例如Eclipse的SWT就是一个和Java的AWT/Swing互相竞争的API。
技术人员没有跟上新技术:过去这八年,Java修修补补,废弃了一些旧的API和程序设计思维,增加了许多新东西。如果开发人员未能随时补充新知识,仍用旧的方法开发系统,就会横生困扰。这其实是很严重的问题。.NET在跨平台问题也不少: .NET某些API在设计时,并没有考虑到跨平台的需求,例如Windows Forms就是如此。这会使得移植.NET VM到不同操作系统时,难度会比较高。Mono(Linux上的.NET VM)曾想移植Windows Forms到Linux上,但是后来放弃了,改成在Wine上面执行Windows Forms(当然效率会因此变差了)。[但是再后来由于System.Drawing实现的比较好,因而又基于System.Drawing来实现底层的SWF,Mono 1.2的发布就是等着SWF1.0的发布。当然效率肯定比不上Windows下的SWF。不过Mono是推举使用GTK#的] 只有核心部分是ECMA的标准,重要的API例如ASP.NET,和ADO.NET都不是标准,而是微软私有的财产,可能涉及法律问题。Mono另外推出Gtk#这套GUI的API(将Gtk+包装起来)。
技术人员没有跟上新技术:.NET经过了5年的发展,最新到来的2.0版本和1.x版本相比较,修改、增加了许多API增加了许多新东西,程序设计的思维也发生了重大的变化。如果开发人员未能随时补充新知识,仍用旧的方法开发系统,就会横生困扰。这其实是很严重的问题,MS的WebCast做的非常好,在帮助技术人员跟上新技术方面MS做的比SUN要好许多。
目前微软有提供一套开放原始码的.NET VM,名为Share Source Common Language Infrastructure,简称SSCLI,代称Rotor。SSCLI仅供爱好者研究使用,不做商业发行(微软商业版的.NET VM是.NET CLR)。SSCLI可以在FreeBSD、Windows、Mac OS X等平台上执行。
为了让.NET能够摆脱微软的控制,除了由Novell/Ximian资助的Mono计划之外(Mono是西班牙文“猴子”的意思), GNU(自由软件基金会),也有一个DotGNU Portable.NET的类似计划。如果Mono和DotGNU
Portable.NET等计划能成功,那么.NET的跨平台才能显露曙光,现在有许多的Linux发行版本都内置了Mono平台,如 Novell Suse Linux系列操作系统。
.NET以后是一定会流行的,至少会在Windows和Linux上成为主流。Linux和Mono得到Novell公司的大力支持,相信在不久的将来.NET将在Linux平台称为开发的平台。为了让Java能够跨进.NET的世界,有人设计了.NET VM上的Java VM,“IKVM.NET”正是这样的一套Java VM。仗着Java VM和.NET VM有许多相似之处,IKVM.NET在设计上就可以取巧,许多机制(例如垃圾收集)直接利用底下的.NET VM,不需要自己完成。有了像IKVM.NET这样的VM,Java就可以跨到.NET平台上,不失为一个扩展势力的好方法。
为了抢夺市场,Java和.NET阵营均使出浑身解数。Java阵营近来的脚步似乎加快了,这是好现象。而.NET阵营更是使出许多绝招,提供下面的工具:
Visual J#:如果是1.1.4或更早以前的Java程序,可以直接利用Visual J#,来将Java的原始码编译成.NET的MSIL。这样的编译,成功率可以达到近100%。
程序转换工具:如果你的Java程序并非1.1.4以前的古董,而是用到Java
2的许多新特色,那么你可以利用微软提供的程序转换工具(例如JLCA),来帮助将Java程序转成.NET程序,达到鲸吞的效果。这些工具通常可以将八九成的程序代码转换成功,但是许多地方仍须手动调整。我们可以期待,未来版本的此类工具会更强大,转换的成功率会更高。
程序合作工具:既有的Java程序不可能一朝一夕改写成.NET,而转换工具也不是100%成功,那么如果能让既有的Java程序继续运作,而鼓励大家新的程序改用.NET平台,并慢慢换掉旧的Java程序,达到蚕食的效果。这个时候,程序代码合作工具就很重要,负责架起Java旧系统和.NET新系统之间的沟通桥梁。例如:Microsoft .NET and J2EE Interoperability Toolkit,就是这样的工具。
分享到:
相关推荐
Java调用.NET WebService是跨平台通信的一种常见方式,尤其在企业级应用中,不同技术栈的应用需要相互交互数据时,这种技术尤为实用。Apache Axis是Java中常用的用于调用Web服务的工具,它提供了方便的API来创建和...
Java和PHP是其他常见的Web开发语言,这可能表示系统在某些部分可能有跨平台或与这些语言的集成考虑。C#是ASP.NET的核心语言,因此在源码中会广泛使用。了解这些技术对于理解并修改源码是必要的。 在【压缩包子文件...
需要注意的是,跨平台通信可能会受到不同框架的实现差异影响,因此在遇到问题时,调整两边的配置或使用兼容性更好的API通常是解决问题的关键。在实际开发中,确保对两端的API有深入理解,并进行充分的测试,以确保...
Java和C#则是现代软件开发的主流语言,它们支持跨平台特性,且C#在.NET平台上具有天然优势,适用于构建大型的企业级应用。Pascal语言虽然相对小众,但在教学和某些特定领域仍有一定的应用。 物流软件的需求分析是...
- **灵活性**:适应不同设备和屏幕尺寸,提供良好的跨平台体验。 #### Forms 身份验证流程 1. **资源请求**:用户尝试访问受保护资源。 2. **重定向至登录页**:系统检测到未授权访问,将用户导向登录页面。 3. **...
这是一个开源Java MVVM框架,旨在在Android和其他JVM平台(例如Windows,MacOS)之间更轻松地进行跨平台开发。 特别是,如果您希望在充分利用Android本机SDK的同时保持跨平台的可能性,则可以使用此Java解决方案。...
Java作为一种跨平台的编程语言,其安全性是其核心特性之一,但如果不正确地编写代码,可能会引入安全隐患。本指南将深入探讨以下几个关键知识点: 1. **Java安全模型**:Java的安全模型基于沙箱机制,它限制了代码...
在.NET中,使用SOAP(Simple Object Access Protocol)和XML作为数据交换格式,允许跨平台的互操作性。 3. **C#、Java和C++的特点**: - C#是面向对象的语言,从C++借鉴了类和模板的概念,同时简化了内存管理并...
- **Flex富客户端技术**:一种用于构建跨平台的RIA(Rich Internet Applications)的应用程序框架。 - **JUnit软件测试**:一个Java编程语言的单元测试框架,用于验证代码的正确性。 ### 3. 教育背景与项目经验 - ...
PDFBox是Apache软件基金会开发的一个开源Java库,用于处理PDF(Portable Document Format)文档。它提供了丰富的API,允许开发者在...在进行PDF到Word转换时,理解转换的局限性也很重要,以避免对结果的不切实际期望。
### Java与C#的深入比较 #### 引言 ...而Java则以其跨平台能力、广泛的社区支持和成熟的生态系统,继续吸引着全球开发者。选择哪种语言,应基于具体项目的需求、团队技能以及期望的运行环境来综合考量。
8. **跨平台**:虽然这里是 Java 版本,但 CKFinder 也支持其他服务器端语言,如 PHP 和 .NET,具有良好的跨平台性。 在压缩包 "132688860162278908" 中,我们期望找到以下内容: - CKFinder 的 Java 源代码和库...
ASP.NET Core 是微软推出的开源、跨平台的 web 开发框架,它允许开发者使用 C# 或者 F# 来构建高效、可移植的 web 应用。Nginx 是一款高性能的 HTTP 和反向代理服务器,常被用于部署 ASP.NET Core 应用,以提供负载...
- **WebService**:是一种跨编程语言和操作系统平台的远程调用协议。它使用HTTP作为传输协议,SOAP作为消息格式标准,WSDL(Web Services Description Language)用于描述服务接口。 - **ASMX**:ASP.NET中的...
"Java"标签明确了编程语言,Java是一种广泛使用的多用途编程语言,尤其适合开发跨平台的服务器端应用。在本例中,它被用于构建高考信息管理系统。 【压缩包子文件的文件名称列表】 虽然提供的列表只有一个条目 ...
Java作为一款跨平台的编程语言,提供了丰富的库来帮助开发者生成和解析二维码。本文将深入探讨如何使用Java实现这个功能,并基于提供的"Java解析生成二维码"的相关文件进行说明。 首先,我们关注到的`QRCode.jar`是...
【标签】:“java”表明该系统是使用Java语言编写的,这是一门广泛应用的、跨平台的编程语言,以其强大的类库和丰富的生态系统而著名。“员工管理”标签则表示系统的核心功能是处理与员工相关的业务逻辑,如个人信息...
5. .Net Framework与.Net Core的区别:运行环境、跨平台能力和性能优化。 【JAVA知识点】 JAVA是一种广泛应用的编程语言,尤其在企业级开发中占据重要地位: 1. 面向对象特性:类、接口、继承、多态和封装。 2. ...