其实,当很多人都在认为Java比C或者C++慢,这首先是由于他是一门介于编译和解析的语言,这可能才是他慢的主要原因。但是近年来Oracle公司一直致力于对Jre的解析算法进行优化,使得这一缺点逐渐在缩短。由此,java的慢的弊端跟落在了java io上,大家都知道,其实java底层是没有io实现的,而他采用的是一种本地接口的方式,通过C或者C++编译产生的动态链接库进行实现的,原本的io是一种stream的方式,传输速度比较慢,当作为java程序员,不得不庆幸oracle对java的io进行了重新的审视,在JDK1.4推出了NIO,利用了通道和缓冲区,很好的实现了io同本地系统IO的对接,使得java更进一个里程碑
那为什么要使用NIO呢?
NIO 的创建目的是为了让 Java 程序员可以实现高速 I/O 而无需编写自定义的本机代码。NIO 将最耗时的 I/O 操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。
流与块的比较
面向流 的 I/O: 系统一次一个字节地处理数据。不利的一面是,面向流的 I/O 通常相当慢。
面向块 的 I/O: 系统以块的形式处理数据。 每一个操作都在一步中产生或者消费一个数据块。 按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的 I/O 缺少一些面向流的 I/O 所具有的优雅性和简单性。
同时,在 JDK 1.4 中原来的 I/O 包和 NIO 已经很好地集成。 java.io.* 已经以 NIO 为基础重新实现了,以使得它可以利用 NIO 的一些特性。例如, 包含以块的形式读写数据的方法。也可以用 NIO 库实现标准 I/O 功能。 例如, 可以容易地使用块 I/O 一次一个字节地移动数据。另外,NIO 还提供了原 I/O 包中所没有的许多好处。
通道和缓冲区(NIO核心)
通道是对原 I/O 包中的流的模拟。到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象。
缓冲区Buffer 是一个对象, 它包含一些要写入或者刚读出的数据。一个 Buffer 实质上是一个容器对象。发送给一个通道的所有对象都必须首先放到缓冲区中;同样地,从通道中读取的任何数据都要读到缓冲区中。
缓冲区实质上是一个数组。通常它是一个字节数组,但是也可以使用其他种类的数组。但是一个缓冲区不仅仅 是一个数组。缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。
简介写了好多了,都是密密麻麻的文字,希望对NIO有一定的了解,好吧,提交了