![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaNIO
Burgess_Lee
对编程语言和新技术非常感兴趣,志同道合者我们一起来学习,如有好的建议或不对的地方, 还希望广大程序猿予以指正。
展开
-
00NIO学习简单的进门
前一段时间一直都在看一些并发和JVM相关的知识。通过一些系统的梳理,逐渐的对目前的所接触到的这方面知识有了更深一步的认识。虽然有些地方看起来还是有些吃力,但是总得给自己一个过程。往下,打算继续Java其他方面知识的学习--JavaNIO方面。希望感兴趣的朋友我们一起来梳理自己的基础。...转载 2018-09-13 14:35:17 · 123 阅读 · 0 评论 -
14 Java NIO与IO
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 面向流与面向缓冲Java NIO和IO...转载 2018-09-21 15:39:34 · 139 阅读 · 0 评论 -
13 Pipe
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:Pipe pipe = Pipe.open();向管道写数据要向管道写数据,需要访问sink通道。像这样:Pipe.SinkChan...转载 2018-09-21 15:24:35 · 145 阅读 · 0 评论 -
12 DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:DatagramChannel channel = DatagramChannel.open();channel.socket()...转载 2018-09-21 15:19:11 · 255 阅读 · 0 评论 -
11 非阻塞式服务器
即使你知道Java NIO 非阻塞的工作特性(如Selector,Channel,Buffer等组件),但是想要设计一个非阻塞的服务器仍然是一件很困难的事。非阻塞式服务器相较于阻塞式来说要多上许多挑战。本文将会讨论非阻塞式服务器的主要几个难题,并针对这些难题给出一些可能的解决方案。查找关于非阻塞式服务器设计方面的资料实在不太容易,所以本文提供的解决方案都是基于本人工作和想法上的。如果各位有其他...转载 2018-09-21 15:05:22 · 281 阅读 · 0 评论 -
10 ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();...转载 2018-09-21 14:21:50 · 113 阅读 · 0 评论 -
09 SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。 一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:Socket...转载 2018-09-21 14:17:32 · 136 阅读 · 0 评论 -
08 FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个...转载 2018-09-19 13:59:17 · 147 阅读 · 0 评论 -
07 NIO Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。为什么使用Selector?仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个...转载 2018-09-19 11:41:30 · 91 阅读 · 0 评论 -
06 通道(Channel)之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中)。下面是一个简单的例子:Ra...转载 2018-09-19 11:06:58 · 2305 阅读 · 0 评论 -
05 Scatter/Gather
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(gather)写入Channel是指在写操作时将多个buf...转载 2018-09-19 10:59:27 · 137 阅读 · 0 评论 -
04 NIO Buffer
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:写入数据到Buffer--------》指针到尾 调用...转载 2018-09-19 10:41:04 · 84 阅读 · 0 评论 -
03 NIO Channel
下面开始正常的NIO系列方面的Channel知识梳理。Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。----》双向 通道可以异步地读写。--------》可以支持异步 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:...转载 2018-09-19 09:48:41 · 121 阅读 · 0 评论 -
02Java NIO 概述
Java NIO 由以下几个核心部分组成:Channels Buffers Selectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。Chann...转载 2018-09-13 15:15:09 · 112 阅读 · 0 评论 -
01NIO入门知识简介
之前也学习过相关的知识,工作中也应用过。比如:channel、缓冲区、以及selector等。本篇博文主要对NIO做一个整体的知识的介绍。Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的I...转载 2018-09-13 14:39:04 · 105 阅读 · 0 评论 -
15 Java NIO Path
Path接口是java NIO2的一部分。首次在java 7中引入。Path接口在java.nio.file包下,所以全称是java.nio.file.Path。 java中的Path表示文件系统的路径。可以指向文件或文件夹。也有相对路径和绝对路径之分。绝对路径表示从文件系统的根路径到文件或是文件夹的路径。相对路径表示从特定路径下访问指定文件或文件夹的路径。相对路径的概念可能有点迷糊。不用担心,我...转载 2018-09-21 15:52:01 · 104 阅读 · 0 评论