![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NIO
文章平均质量分 85
阿弥陀佛僧
知幻即离,不假方便;离幻即觉,亦无渐次。
展开
-
NIO10——Non-blocking Server
即使你了解 Java NIO 的非阻塞功能是怎么工作的,设计一个非阻塞的 Java NIO server 依然很困难。和阻塞式的 IO 相比,非阻塞的 IO 有多个挑战。下面就讨论一下非阻塞的 Server 面临的主要挑战,并提供一些可能的解决方案。 虽然这里描述的方案是围绕着 Java NIO 的,我想这些方案也同样适用于那些类似于 Selector 的结构的场景。这些数据结构是由底层操作系...原创 2019-11-25 22:45:57 · 220 阅读 · 0 评论 -
NIO09——ServerSocketChannel
ServerSocketChannel 可以监听进来的 TCP 连接,类似于 Java 网络编程中的 ServerSocket。ServerSocketChannel 类位于 java.nio.channels 包中。下面是一个示例:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();//绑定一个端口se...原创 2019-10-30 00:12:15 · 695 阅读 · 0 评论 -
NIO08——SocketChannel
SocketChannel 是连接到 TCP 网络套接字的 Channel,相当于 Java 网络编程中的 Socket。有两种创建 SocketChannel 的方式:手动开启一个 SocketChannel 并连接到因特网上的一个服务器当传入的连接到达 ServerSocketChannel 时或者说 ServerSocketChannel 新进来一个连接的时候会创建一个 Socket...原创 2019-10-29 23:46:54 · 489 阅读 · 0 评论 -
NIO07——FileChannel
FileChannel 是一个连接到文件的通道,使用 FileChannel 可以从文件读数据,也可以向文件中写入数据。Java NIO 的 FileChannel 是标准 Java IO 读写文件的替代方案。 FileChannel 不能设置为非阻塞的模式,也就是说 FileChannel 总是阻塞的。 1、开启 FileChannel 在使用 FileChannel 之前必须先开启。但...原创 2019-10-27 23:40:53 · 497 阅读 · 0 评论 -
NIO06——Selector
Java NIO 的 Selector 组件可以监测一个或多个 Channel 实例,可以监听到哪一个 Channel 为读写或者其他操作做好了准备。这样一个单线程就可以管理多个 Channel,相当于管理了多个网络连接。 1、为什么使用 Selector ? 使用一个线程去处理多个 Channel 的优势在于开启的线程少了,事实上,可以仅使用一个线程去处理所有的 Channel。操作系统在...原创 2019-10-23 22:18:26 · 231 阅读 · 0 评论 -
NIO05——通道之间的数据传输
在 Java NIO 中,如果两个 Channel 中的一个是 FileChannel,那么这两个 Channel 可以直接传送数据。FileChannel 提供了一个 transferTo() 方法和一个 transferFrom() 方法可以做到这些。 1、transferFrom() FileChannel.transferFrom() 方法可以从一个源 Channel 中向这个 F...原创 2019-10-21 01:01:02 · 528 阅读 · 0 评论 -
NIO04——Scatter 和 Gather
Java NIO 内置了 Scatter(分散器) 和 Gather(聚集器),Scatter 和 Gather 是从 Channel 中读取数据或者向 Channel 中写入数据的相关概念。 Channel 的分散(Scatter)读是指将一个 Channel 中的数据读取到多个 Buffer 中的读操作,即将这个 Channel 中的数据“分散”到多个 Buffer 中。 Channel...原创 2019-10-21 00:05:45 · 393 阅读 · 0 评论 -
NIO03——Buffer
一、Buffer 简介 Java NIO 中的 Buffer 用于和 Channell 交互,像之前说的那样,数据从 Channel 读入到 Buffer,从 Buffer 写入到 Channel。 Buffer 本质上是一块内存,你可以向其中写入数据,之后再从中读取你写入的数据。这一块内存被包装成了一个 NIO Buffer 对象,这个对象提供了一些便于访问该内存的方法。二、Buffer ...原创 2019-10-17 00:09:25 · 451 阅读 · 0 评论 -
NIO02——Channel
一、Channel 简介 Java NIO 中的 Channel 有些类似于 Stream,但又有些不同:一个 Channel 即可读又可写,而 Stream 通常只能单向操作,即流分为输入流(只能读)和输出流(只能写)Channel 的读和写可以异步进行Channel 总是从 Buffer 中读数据或者向 Buffer 中写数据 如上所述,你可以将 Channel 中的数据读到一个...原创 2019-10-16 21:33:37 · 247 阅读 · 0 评论 -
NIO01——概述
Java NIO(New IO) 从 JDK1.4 开始, 是一个可以替代标准 Java IO 和 Java 网络 IO 的IO API,Java NIO 提供了与标准 IO 不同的 IO 工作方式。一、Java NIO 的特性: 1、Channels and Buffers:通道和缓冲区 标准的 IO 是基于字节流和字符流进行操作的,而 NIO 是基于通道(Channel)和缓冲区(B...原创 2019-10-16 00:23:29 · 290 阅读 · 1 评论 -
NIO——03通道Channel
一、IO的进化史 ①起初系统的IO由CPU负责,在IO频繁的时候CPU资源不能被充分利用 ②后来,有了DMA(直接存储器),当有IO操作时DMA先向CPU申请权限,DMA申请到权限后全权负责IO操作,这样CPU就可以去完成其他的操作,这就是传统的IO模式,但这种方式下当应用程序有大量的频繁的IO操作时,会导致DMA冲突 ③使用通道专门负责IO,通道是一个完全独立的处理器,不需要向CPU申...原创 2019-10-14 23:31:32 · 482 阅读 · 0 评论 -
NIO——02缓冲区Buffer
一、缓冲区 缓冲区(Buffer)是一个用于存取特定基本数据类型数据的容器,底层是这些基本数据类型的数组,由java.nio包定义,所有缓冲区都是Buffer抽象类的子类。主要用于与NIO通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道中的。 根据数据类型不同,NIO提供了以下类型的Buffer: ByteBuffer CharBuffer ShortBuffer Int...原创 2019-10-14 00:54:23 · 322 阅读 · 0 评论 -
NIO——01简介
一、NIO Java NIO(New IO),也可理解为Non Blocking IO(非阻塞式IO)。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO相对于IO在对文件的读写上更加高效。 NIO与IO的区别:IONIO面向流(Stream Oriented)面向缓冲区(Buffer Oriented)...原创 2019-10-11 23:29:07 · 212 阅读 · 0 评论