21
Java NIO 简明教程
最近在整理 Java NIO 相关的资料,发现了 Jakob Jenkov 2014年写的 Java NIO Tutorial 教程,概念讲的非常透彻、浅显易懂,值得作为 Java NIO 学习的推荐材料。
最近在整理 Java NIO 相关的资料,发现了 Jakob Jenkov 2014年写的 Java NIO Tutorial 教程,概念讲的非常透彻、浅显易懂,值得作为 Java NIO 学习的推荐材料。
在学习 Java NIO 和 IO API 时,很快你就会问自己:什么时候该用 IO,什么时候使用 NIO?
在本文中,将试图阐明 Java NIO 和 IO 之间的区别、它们的用例以及它们如何影响代码的设计。
Java NIO 的管道是 2 个线程间的单向数据传输。一个管道(Pipe)有一个 source channel 和一个 sink channel。我们把数据写入 sink channel 中,从 source channel 读取。
Java NIO 中的 DatagramChannel 是一个可以发送、接收 UDP 数据包的通道。由于 UDP 是面向无连接的网络协议,所以不能像使用其他通道那样直接进行读写数据。正确的做法是发送、接收数据包。
现在你已经知道了 Java NIO 里面那些非阻塞特性是怎么工作的,但是要设计一个非阻塞的服务仍旧比较困难。非阻塞 IO 相对传统的阻塞 IO 给开发者带来了更多的挑战。在本节非阻塞服务的讲解中,我们一起来讨论这些会面临的主要挑战,同时也会给出一些潜在的解决方案。
在 Java NIO 中的 ServerSocketChannel 是用于监听新连接的 TCP 通道, 就像标准 IO 中的 ServerSocket 一样。ServerSocketChannel 类在 java.nio.channels包中。
在 Java NIO 体系中,SocketChannel 是用于 TCP 网络连接的套接字接口,相当于 Java 网络编程中的 Socket 套接字接口。创建 SocketChannel 主要有两种方式,如下:
Java NIO 中的 FileChannel 是用于连接文件的通道(Channel)。通过 FileChannel 可以读、写文件的数据。Java NIO 的 FileChannel 是相对标准 Java IO API 的可选接口。
FileChannel 不可以设置为非阻塞模式,他只能在阻塞模式下运行。