![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NIO
iteye_7682
这个作者很懒,什么都没留下…
展开
-
NIO(一)—— 什么是同步?什么是异步?
同步:如果有多个任务或者事件要发生,这些任务或者事件必须逐个地进行,一个事件或者任务的执行会导致整个流程的暂时等待,这些事件没有办法并发地执行; 异步:如果有多个任务或者事件发生,这些事件可以并发地执行,一个事件或者任务的执行不会导致整个流程的暂时等待。 举个简单的例子,假如有一个任务包括两个子任务A和B,对于同步来说,当A在执行的过程中,B只有等...原创 2015-06-19 15:14:49 · 1051 阅读 · 0 评论 -
NIO(九)—— IO与NIO的区别和各自适用场景
IO与NIO的区别:1. 面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 即IO是基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。2. 阻塞与非阻塞IO IO的各种流是...原创 2015-06-24 10:27:59 · 141 阅读 · 0 评论 -
NIO(八)—— NIO中的几个基础概念之一:Selector
Selector(选择器) 是NIO中最核心的一个东西,Selector的作用就是用来轮询每个注册的Channel,一旦发现Channel有注册的事件发生,便获取事件然后进行处理。 这样一来,只是用一个单线程就可以管理多个通道,也就是管理多个连接。这样使得只有在连接真正有读写事件发生时,才会调用函数来进行读写,就大大地减少了系统开销,并且不必为每个连...原创 2015-06-24 10:27:35 · 91 阅读 · 0 评论 -
NIO(七)—— NIO中的几个基础概念之一:Buffer
2.Buffer(缓冲区) 故名思意,缓冲区,实际上是一个容器,是一个连续数组。Channel提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer。它是NIO中非常重要的一个东西,在NIO中所有数据的读和写都离不开Buffer。比如上面的一段代码中,读取的数据时放在byte数组当中,而在NIO中,读取的数据只能放在Buffer中。同样地,写入数据也是先写入到...原创 2015-06-24 10:27:09 · 178 阅读 · 0 评论 -
NIO(六)—— NIO中的几个基础概念之一:Channel
在NIO中有几个比较关键的概念:Channel,Buffer,Selector。 1. Channel(通道) 顾名思义,就是通向什么的道路,为某个提供了渠道。 在传统IO中,我们要读取一个文件中的内容,通常是像下面这样读取的: package com.mycom.test.nio;import java.io.File;imp...原创 2015-06-24 10:25:22 · 95 阅读 · 0 评论 -
NIO(五)—— 五种IO模型?
在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。 下面就分别来介绍一下这5种IO模型的异同。1.阻塞IO模型 最传统的一种IO模型,即在读写数据过程中会发生阻塞现象。当用户线程发出IO请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程...原创 2015-06-19 15:59:45 · 134 阅读 · 0 评论 -
NIO(四)—— 什么是同步IO?什么是异步IO?
同步IO: 如果一个线程请求进行IO操作,在IO操作完成之前,该线程会被阻塞; 异步IO: 如果一个线程请求进行IO操作,IO操作不会导致请求线程被阻塞。 事实上,同步IO和异步IO模型是针对用户线程和内核的交互来说的: 对于同步IO:当用户发出IO请求操作之后,如果数据没有就绪,需要通过用户线程或者内核不断地去轮询数据是否就绪...原创 2015-06-19 15:45:24 · 341 阅读 · 0 评论 -
NIO(三)—— 什么是阻塞IO?什么是非阻塞IO?
在了解阻塞IO和非阻塞IO之前,先看下一个具体的IO操作过程是怎么进行的。 通常来说,IO操作包括:对硬盘的读写、对socket的读写以及外设的读写。 当用户线程发起一个IO请求操作(本文以读请求操作为例),内核会去查看要读取的数据是否就绪,对于阻塞IO来说,如果数据没有就绪,则会一直在那等待,直到数据就绪;对于非阻塞IO来说,如果数据没有就绪,则会返回一...原创 2015-06-19 15:30:48 · 851 阅读 · 1 评论 -
NIO(二)—— 什么是阻塞?什么是非阻塞?
阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,但是由于该请求操作需要的条件不满足,那么就会一直在那等待,直至条件满足; 非阻塞:当某个事件或者任务在执行过程中,它发出一个请求操作,如果该请求操作需要的条件不满足,会立即返回一个标志信息告知条件不满足,不会一直在那等待。 这就是阻塞和非阻塞的区别。也就是说阻塞和非阻塞的区别关键在于当发出请求一个操作时,如...原创 2015-06-19 15:18:18 · 444 阅读 · 0 评论 -
NIO(十)—— NIO的几个例子
1. FileChannel写入文件package com.mycom.test.nio;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.FileChan...原创 2015-06-24 11:13:50 · 85 阅读 · 0 评论