跟我学IO(Java中的IO和NIO)

Java的NIO(新的输入/输出)库是在JDK1.4中引入的。NI/O弥补了原来I/O的不足,它在标准Java代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO不用使用本地代码(如:C代码)就可以利用底层优化,这是原来的I/O包所无法做到的。

Java的NIO(新的输入/输出)库是在JDK1.4中引入的。NI/O弥补了原来I/O的不足,它在标准Java代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO不用使用本地代码(如:C代码)就可以利用底层优化,这是原来的I/O包所无法做到的。 

I/O(输入/输出)简介 

I/O(者输入/输出)接口指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。它对于任何计算机系统都非常关键,因而所有I/O的主体实际上是内置在操作系统中的。单独的程序一般是让系统为它们完成大部分的工作。 

在Java编程中,直到最近一直使用流的方式完成I/O。所有I/O都被视为单个的字节的移动,通过一个称为Stream的对象一次移动一个字节。流I/O用于与外部世界接触。它也在内部使用,用于将对象转换为字节,然后再转换回对象。 

NI/O与原来的I/O有同样的作用和目的,但是它使用不同的方式块I/O。正如您将在本教程中学到的,块I/O的效率可以比流I/O高许多。 

为什么要使用NI/O? 

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

流与块的比较

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

面向流的I/O 

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

面向块的I/O 

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

NI/O在JDK中的集成

在 JDK 1.4 中原来的I/O包和NI/O已经很好地集成了。java.io.*已经以NI/O为基础重新实现了,所以现在它可以利用NI/O的一些特性。例如, java.io.* 包中的一些类包含以块的形式读写数据的方法,这使得即使在更面向流的系统中,处理速度也会更快。 

也可以用NI/O库实现标准I/O功能。例如,可以容易地使用块I/O一次一个字节地移动数据。但是正如您会看到的,NI/O还提供了原I/O包中所没有的许多好处。 

最灵繁的人也看不见自己的背脊。——非洲
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号