Java NIO 第一章 介绍(3)

来源:互联网 发布:淘宝设置价格区间 编辑:程序博客网 时间:2024/05/16 19:26

1.3 利用操作系统优秀的特质

 

       人们对操作系统的大部分的开发工作都是为了提高系统的IO性能。很多聪明的人花费了大量的时间,使用非常高超的技术来让数据更加流畅的运行在系统中。操作系统的生产商们花费了大量的时间和金钱来寻找在某些方面击败对手的优势。

      

今天的操作系统是软件工程的一个现代奇迹(呵呵,当然有些比其他的更加了不起)。但是Java程序员们怎么来利用这些魔术,同时却能保持平台的独立性呢?呵呵,这将是另一个“天下没有免费的午餐”的例子。

 

JVM虚拟机就像一把双刃剑。它为程序员提高了一个唯一的平台,让程序员可以远离各种操作系统间繁琐的差异。这样程序员就可以更快更容易的写出平台独立的代码,因为这些跟平台相关的特征都被虚拟机隐藏起来了。同时,隐藏操作系统特质意味着我们将不能使用那些优秀的特质。

 

我们该做什么?作为一个开发人员,你可以直接使用JavaJNIJava native interface)接口来使用操作系统的特质。这样做就让你的代码跟特定的操作系统(甚至是特定的一个操作系统版本)捆绑起来了。如果你的本地代码不能保证100%没有bug,你的Java虚拟机也很可能崩溃掉。如果你是一个操作系统供应商,你可以提供一个带有操作系统特性的虚拟机给你的客户,你的客户就可以调用这些Java API来使用他们。但这样做意味着你可能违背你向sun公司签署的保持Java虚拟机一致性的许可协议。Sun公司曾经将Microsoft公司告上法庭,因为Microsoft实现的虚拟机中的JDirect包只能运行在Microsoft的系统里面,违背了虚拟机一致性的许可协议。如果你真的想利用操作系统的特性,教你最后一招:使用其他的语言。

 

Java.nio包为解决这些问题提供了很多的抽象类。Channel类和Selector类就是在jdk1.4版本之后才推出来的,这些类专门为IO服务提供了标准的API。当然,“天下没有免费的午餐”仍然适用:你不能通过它来访问所有操作系统的所有特质,但是这些新的类提供了一个强大的框架,这个框架将包含当今商业操作系统所共同拥有的高性能IO的一些特质。除此之外,java.nio.channel.spi还提供了一个新的服务提供着接口(Service ProviderInterface SPI)的包,这个包允许你在不违背Java规格的情况下插入新类型的通道和选择器。

 

有了NIO之后,Java就在那些需要高性能IO的场合有了用武之地,它将很好的适用于苛刻的商业、娱乐、科学和学术领域中。

 

除了NIOjdk1.4还在其他方面也有很多重大的提高。自从1.4开始,Java平台已经达到了非常高的成熟度,基本上没有多少应用领域是Java不能涉足的。如果想了解更多关于jdk1.4的内容,请参考David Flanagan (O'Reilly)的《Java in a nutshell,Fourth Edition》,它是一本全面介绍jdk1.4各种新特性的书。

原创粉丝点击