Java NIO

https://dzone.com/articles/java-nio-vs-io

https://www.jianshu.com/p/a9b2fec31fd1

IO和NIO简述

The main difference between IO and NIO is that IO is blocking, while NIO is non-blocking.

1、简述

在以前的Java IO中,都是阻塞式IO,NIO引入了非阻塞式IO。 第一种方式:我从硬盘读取数据,然后程序一直等,数据读完后,继续操作。这种方式是最简单的,叫阻塞IO。 第二种方式:我从硬盘读取数据,然后程序继续向下执行,等数据读取完后,通知当前程序(对硬件来说叫中断,对程序来说叫回调),然后此程序可以立即处理数据,也可以执行完当前操作在读取数据。

2.流与块的比较

原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。面向流 的 I/O 系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。这样做是相对简单的。不利的一面是,面向流的 I/O 通常相当慢。 一个 面向块 的 I/O 系统以块的形式处理数据。每一个操作都在一步中产生或者消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的 I/O 缺少一些面向流的 I/O 所具有的优雅性和简单性。

3.通道与流

Channel是一个对象,可以通过它读取和写入数据。通道与流功能类似,不同之处在于通道是双向的。而流只是在一个方向上移动(一个流必须是 InputStream 或者 OutputStream 的子类), 而通道可以用于读、写或者同时用于读写。

4.缓冲区Buffer

在 NIO 库中,所有数据都是用缓冲区处理的。在 NIO 库中,所有数据都是用缓冲区处理的。

Position: 表示下一次访问的缓冲区位置 Limit: 表示当前缓冲区存放的数据容量。 Capacity:表示缓冲区最大容量

flip()方法:读写模式切换

clear方法:它将 limit 设置为与 capacity 相同。它设置 position 为 0。

results matching ""

    No results matching ""