Java的NIO
文章平均质量分 76
惜暮
这个作者很懒,什么都没留下…
展开
-
Java的NIO概述
NIO的核心组成部分ChannelBuffersSelectors1. Channel和Buffer基本上,所有的IO在NIO中都从一个Channel开始。Channel有点象流。数据可以从Channel读到Buffer中,也可以从Buffer写到Channel中。这里有个图示: Channel和Buffer有好几种类型。下面是JAVA NIO中的一些主要Channel的实现: - Fi原创 2016-12-05 12:58:59 · 699 阅读 · 0 评论 -
Java的NIO之FileChannel
FileChannel文件通道Java的NIO中的FileChannel是一个连接到文件的通道,文件可以通过这个通道来进行读写操作。值得注意的是:FileChannel无法设置成非阻塞模式,它总是工作在阻塞模式下。下面介绍一下FileChannel的用法:7.1 打开一个FileChannel在使用FileChannel之前我们必须先打开一个FileChannel;但是我们无法直接打开一个FileC原创 2016-12-05 13:22:52 · 1198 阅读 · 0 评论 -
《Java源码解析》NIO中Buffer缓冲区的实现
Buffer 缓冲区Java的NIO中Buffer至关重要:buffer是读写的中介,主要和NIO的通道交互。数据是通过通道读入缓冲区和从缓冲区写入通道的。其实缓冲区buffer的本质就是一块可以读写的内存块。这块内存块被包装成NIO的Buffer对象,并提供了一组方法方便读写。3.1 Buffer的基本用法:使用Buffer读写数据一般是下面步骤: 1. 写入数据到Buffer 2. 调用fl原创 2016-12-05 13:18:07 · 2190 阅读 · 0 评论 -
《Java源码解析》之NIO的Selector机制(Part3:Selector.select())
Selector.select()函数的分析:前面已经介绍过了Selector的open函数以及channel的register函数,现在分析最后一个函数:select()函数。selector.select()在Selector类中此方法是一个抽象的。如下: public abstract int select() throws IOException; 函数功能:选择一些I/O操作已经准备好原创 2016-12-07 18:03:40 · 4495 阅读 · 0 评论 -
《Java源码解析》之NIO的Selector机制(Part2:SelectableChannel.register(Selector sel, int ops))
通过上一篇博客,我们知道了Selector机制中的open()函数做了什么,其实也就是创建了一个管道,并把pipe的读写文件描述符放入pollArray中,这个pollArray是Selector的枢纽。下面我们抓取源码看一下channel在selector中注册时做了什么? SelectableChannel.register(Selector sel, int ops)SelectableCh原创 2016-12-06 14:43:09 · 3424 阅读 · 0 评论 -
《Java源码解析》之NIO的Selector机制(Part1:Selector.open())
Selector机制之Selector.open()函数的解析在NIO中我们一般都是Channel与Selector配合使用的,一般情况下使用的方法如下://打开Selector来处理channelSelector selector = Selector.open();//将channel注册到selector中,并将channel设置成等待新的连接serverChannel.register原创 2016-12-05 13:29:57 · 5797 阅读 · 1 评论 -
Java的NIO之Selectors的使用
就前面的知识来说,对于一般的NIO应用足够了,那为什么推出Selector呢?Selectors(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程就可以管理多个channel,从而管理多个网络连接。这样单线程就可以实现对于OIO多线程才能实现的事情。6.1 为什么使用Selectors?使用单个线程来处理多个channel想原创 2016-12-05 13:28:07 · 1406 阅读 · 1 评论 -
Java的NIO之用于UDP的DatagramChannel
Java NIO中的DatagramChannel是一个能 收发 UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。10.1 打开 DatagramChannel下面是打开DatagramChannel的方式:DatagramChannel channel = DatagramChannel.open();channel.socket().bi原创 2016-12-05 13:25:25 · 1385 阅读 · 0 评论 -
Java的NIO之服务端的ServerSocketChannel的使用
ServerSocketChannelJava的NIO中的ServerSocketChannel是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。所以不难想象ServerSocketChannel是运行在服务端的。ServerSocketChannel类在java.nio.channels包中。下面有个简单的例子:ServerSocketChannel serv原创 2016-12-05 13:24:49 · 1308 阅读 · 0 评论 -
Java的NIO之网络通信的SocketChannel
Java的NIO中的SocketChannel是一个连接到TCP网络套接字的通道(SocketChannel这个通道一般用于客户端,服务端一般使用ServerSocketChannel)。可以通过以下2种方式创建SocketChannel: 1. 打开一个SocketChannel并连接到互联网的某台服务器上。 2. 一个新的连接到达ServerSocketChannel时,server端会创建原创 2016-12-05 13:24:09 · 841 阅读 · 0 评论 -
Java的NIO之不同channel之间传输数据
5.不同通道channel之间传输数据在Java的NIO中,如果两个通道中有一个是FileChannel,那么我们可以直接将数据从一个channel传输到另外一个channel中。两个通道之间传输数据的方式有两种,分别是: - transferFrom() - transferTo()5.1 transferFrom()FileChannel 的transferFrom()方法可以将数据从源通道原创 2016-12-05 13:21:31 · 1523 阅读 · 0 评论 -
Java的NIO之Scatter和Gather
Java的NIO开始支持scatter/gather,scatter/gather用于描述从channel中读取数据或则写入数据到channel的操作: 分散(scatter) 从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。 聚集(gather)写入Channel原创 2016-12-05 13:20:32 · 587 阅读 · 2 评论 -
《Java源码解析》NIO中的heap Buffer和direct Buffer区别
heap buffer 和 direct buffer区别在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法:ByteBuffer.allocate(int capacity);ByteBuffer.wrap(byte[] array);查看JDK的NIO的源代码关于这两个部分:/**allocate(原创 2016-12-05 13:05:36 · 6666 阅读 · 0 评论 -
Java的NIO之Channel通道
1.Channel 通道的简介java的NIO的通道类似流,但是又有一些不同: - 既可以从Channel中读数据也可以往Channel里面写数据;但是流的读写一般是单向的。 - Channel可以异步的读写; - Channel的读写是通过Buffer这个中介实现的。数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。如下图所示:引用一段关于描述Channel的文字:原创 2016-12-05 13:00:42 · 1129 阅读 · 0 评论 -
Java的NIO与IO的区别
NIO是JDK1.4引入的异步IO,NIO核心部分就是三点:ChannelBufferSelectorNIO与IO对比NIO与IO的区别,总体上来说体现在三个方面:IO 基于流(Stream oriented), 而 NIO 基于 Buffer (Buffer oriented)IO 操作是阻塞的, 而 NIO 操作是非阻塞的IO 没有 selector 概念, 而 NIO 有 sel原创 2017-03-07 15:04:24 · 790 阅读 · 0 评论