ope电竞竞猜_ope体育·app下载_ope体育电竞app
ope电竞竞猜

过,Java NIO:NIO概述,高通骁龙

admin admin ⋅ 2019-04-03 07:17:22

上一篇:Java NIO:浅析I/O模型

在上一篇博文中叙述了几种IO模型,现在咱们开端进入Java NIO编程主题。NIO是Java 4里边供给的新的API,意图是用来处理传统IO的问题。本文下面分别从Java NIO的几个根底概念介绍起。

以下是本文的目录纲要:

一.NIO中的几个根底概念

二.Channel

三.Buffer

四.Selector

若有不正之处,请多多体谅并欢迎批评指正。

一.NIO中的几个根底概念

在NIO中有几个比较要害的概念:Channel(通道),Buffer(缓冲区),Selector(选择器)。

首先从Channel说起吧,通道,望文生义,便是通向什么的路途,为某个供给了途径。在传统IO中,咱们要读取一个文件中的内容,通常是像下面这样读取的:

public class Test {
public static void main(String[] args) throws IOException {过,Java NIO:NIO概述,高通骁龙
Fil秘鲁伟人甲由e file = new File("data.txt");
InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
inputS过,Java NIO:NIO概述,高通骁龙tream.read(bytes);
inputStream.close();
}
}20公分我变身

这儿的InputStream实际上便是为读取文件供给一个通道的。

因而可以将NIO 中的Channel同传统IO中的Stream来类比,可是要注意,传统警界金童IO中,Stream是单向的,比方InputStream只能进行读取操作,OutputStream只能进行写操作。而Channel是双向的,既可用来进行读操作,又可用来进行写操作。

Buffer(缓冲区),是NIO中非常重要的一个东西,在NIO中所有数据的读和写都离不开Buffer。比方上面的一段代码中,读取的数据时放在byte数组傍边,而在NIO中,读取的数据只能放在Buffer中。同样地,写入数据也是先写入到Buffer中。

下面介绍一下NIO中最中心的一个东西:Selector。可以说它是NI叶选廉新欢O中最要害的一个部分,Selector的效果便是用来轮询每个注册的Channel,一旦发现Channel有注册的事情发作,便获取事情然后进行处理。

比方看下面的这个比如:

Java NIO:NIO概述

 用单线程处理一个Selector,谥组词然后经过Sele妖蛊降ctor.select()办法来获取抵达事情,在获取了抵达事情之后,就可以逐一地对这些事情进行呼应处理。

二.Channel

在前面现已说到,Channel和传统IO中的Stream很类似。尽管很类似,可是有很大的差异,首要差异为:通道是双向的,经过一个Channel既可以进行读,也可以进行写;而Stream只能进行单向操作,经过一个Stream只能进行读或许写;

以下是常用的几种过,Java NIO:NIO概述,高通骁龙通道:

  • FileChannel
  • So112天龙辅佐cketChanel
  • ServerSocketChannel
  • DatagramChannel

经过运用FileChannel可以从文件读或许向文件写入数据;经过SocketChannel,以TCP来向网络衔接的两头读写数据;经过ServerSocketChanel可以监听客户端建议的TCP衔接,并为每个TCP衔接创立一个新的SocketChannel来进行数据读写;经过DatagramChannel,以UDP协议来向网络衔接的两头读写数据。

下面给出经过FileChannel来向文件中写入数据的一个比如:

public class Test {
public金祝专线 static void main(String[] args) throws IOException {
File file = new File("阜宁焦爱芹老公data.txt");
F添下面ileOutputStream outputStream = new FileOutputStream(file);
FileChannel channel = outputStream过,Java NIO:NIO概述,高通骁龙.getChannel();
ByteBuffer buff穿越嫡女庶媳er = ByteBuffer.allocate(1024);
String string = "java nio";
buffer.put(string.getBytes());
buffer.flip(); //此处必需要调用buffer的flip办法
channel.write(buffer);
channel.close();
outputStream.close();
}
}

 经过上面的程序会向工程目录下的过,Java NIO:NIO概述,高通骁龙data.txt文件写入字符串"java nio",注意在调用channel的write办法之前羽咲有必要调用buffer的flip办法,不然无法正确写入内容,至于详细原因将鄙人篇博文中详细叙述Buffer的用法时论述。

三.Buffer

Buffer,故名思意,缓冲区,实际上是一个容器,是一个接连数组。Channel供给从文件、网络读取数据的途径,可是读取或写入的数据都有必要经由Buffer。详细看下面这张图就了解了:

Java NIO:NIO概述

上面的无忌讳校医图描绘了从一个客户端向服务端发送数据,然后服务端接纳数据的进程。客户端发送数据时,有必要先将数据存入Buffer中,然后将Buffer中的内容写入通道。服务端这边接纳数据有必要经过Channel将数据读入到Buffer中,然后再从Buffer中取出数据来处理。

在NIO中,Buffer是一个顶层父类,它是一个抽象类,常用的Buffer的子类有:

  • ByteBuffer
  • I点苍山七绝宫ntBuffer
  • CharBuffer
  • LongBuffer
  • Double淄博人体彩绘Buffer
  • F床三loatBuffer
  • ShortBuffer

如果是关于文件读写,上面几种Buffer都可能会用到。可是关于网络读写来说,用的最多的是ByteBuffer。

关于Bu虚拟定位王ffer的详细运用以及它的l过,Java NIO:NIO概述,高通骁龙imit、posiion和capacity这几个特点的了解鄙人一篇文章中叙述。

四.Selector

Selector类是NIO的中心类,Selector可以检测多个注册的通道上是否有事情发作,如果有事情发作,便获取事情然后针对每个事情进行相应的呼应处理。这样一来,仅仅用一个单线程就可以办理多个通道,也便是办理多个衔接。这样使得只要在衔接真实有读写事情发作时,才会调用函数来进行读写,就大大地减少了体系开支,而且不用为每个衔接都创立一个线程,不用去保护多个线程,而且避免了多线程访组词之间的上下文切换导致的开支。

与Selector有关的一个要害类是SelectionKey,一个SelectionKey表明一个抵达的事情,这2个类构成了服务端处理事务的要害逻辑。

关于江苏丰县天气预报Selector类的详细运用将在后续文章中论述。

原文地址:http://www.cnblogs.c过,Java NIO:NIO概述,高通骁龙om/dolphin0520/p/3919162.html

如有侵权,请联络删去,谢谢。

相关新闻

admin

admin

TA太懒了...暂时没有任何简介

精彩新闻