[第1节] Java NIO流-简介和概述

来源:互联网 发布:windows office 2013 编辑:程序博客网 时间:2024/05/28 03:03

Java平台提供了一整套I/O,其抽象程度各有不同。然而,离冰冷的现实越远,要搞清楚来龙去脉就越难--不管使用哪一种抽象,情况都是如此。JDK1.4NIO软件包引入了一套新的抽象用于I/O处理。与以往不同的是,新的抽象把重点放在了如何缩短抽象与现实之间的距离上面。NIO抽象与现实中存在的实体有着非常真实直接的交互关系。要想最大限度地满足Java应用程序的密集I/O需求,理解这些新的抽象,以及与其发生交互作用的I/O服务(其重要性并不亚于抽象),正是关键所在。

本章假定您熟知基本的I/O概念,NIO类模拟I/O函数,因此,必须掌握操作系统层面的处理细节,才能理解新的I/O模型。

Niojava New IO的简称,在jdk1.4里提供的apiSun官方标榜的特性如下:

1.为所有的原始类型提供(Buffer)缓存支持。

2.字符集编码解码解决方案。

3.Channel:一个新的原始I/O抽象。

4.支持锁和内存映射文件的文件访问接口。

5.提供多路(non-blocking)非阻塞式的高伸缩性网络I/O


NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。

流与块的比较。

       原来的I/O库(在java.io.*中)与NIO最重要的区别是数据打包和传输的方式。正如前面提到的,原来的I/O以流的方式处理数据,而NIO以块的方式处理数据。

       面向流的I/O系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。为流式数据创建过滤器非常容易。链接几个过滤器,以便每个过滤器只负责单个复杂处理机制的一部分,这样也是相对简单的。不利的一面是,面向流的I/O通常非常慢。

       一个面向块的I/O系统以块的形式处理数据。每一个操作都在一步中产生或消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的I/O缺少一些面向流的I/O所具有的优雅性和简单性。

集成的I/O

JDK1.4中原来的I/O包盒NIO已经很好地集成了java.io.*已经以NIO为基础重新实现了,所以现在它可以利用NIO的一些特性。

例如,java.io.*包中的一些类包含以块的形式读写数据的方法,这使得在更面向流的系统中,处理速度也会更快。

也可以用NIO库实现标准I/O功能。例如,可以容易地使用块I/O包中所没有的许多好处。


原创粉丝点击