nio 学习

io与nio区别:

io是面向流的,  nio是面向缓冲区的(速度快)

io是线程阻塞的,nio是线程非阻塞的,所以在nio中一个单独的线程可以处理多个输入和输出通道(channel)的操作

服务端:

selector: <-注册
channel_1(key的属性为accept) —— 对应 socket_1
循环遍历key建立与客户端连接

>-返回key
channel_2(key的属性为accept) —— 对应 socket_2 执行操作如:给客户端发送消息

客户端:

建立channel

与服务端连接

注册selector

循环便利key

删除key,执行客户端方法

时间: 2024-10-05 15:28:36

nio 学习的相关文章

java nio学习笔记(一)

位置保留,待用 java nio学习笔记(一),布布扣,bubuko.com

Nio学习4——EchoServer在Io,Nio,Nio.2中的实现

阻塞IO实现: public class PlainEchoServer { public void serve(int port) throws IOException { final ServerSocket socket = new ServerSocket(port); try { while (true) { final Socket clientSocket = socket.accept(); System.out.println("Accepted connection from

Nio学习3——基础模型:Reactor模式和多路复用

Reactor模式和NIO 本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的结构: 1. Read request 2. Decode request 3. Process service 4. Encode reply 5. Send reply 经典的网络服务的设计如下图,在每个线程中完成对数据的处理: 但这种模式在用户负载增加时,性能将下降

Nio学习5——对NIO.2(AIO) Reactor模式封装的拆解

我们通过nio学习了Reactor模式,但是在java7中又出现了NIO.2,新的异步框架出来了,在上节中的服务端视线中看不到Reactor的影子了,但是Netty in action中写到:But notice that NIO.2 handles threading and the creation of the so-called event loop for you.所以模式还是没变,只是封装了而已!那让我们来分解下AIO(NIO.2)的封装吧! 首先看下AsynchronousServ

NIO学习:使用Channel、Buffer写入文件

NIO的效率要高于标准IO,因为NIO将最耗时的IO操作(填充和提取缓冲区)转移会操作系统.NIO以块为单位传输数据,相比标准IO的以字节为单位效率要高很多. 通道和缓冲时NIO的核心对象,每个NIO操作都要使用到它们. 通道是对流的模拟,但与流不同,通道的传输是双向的,一个通道可以同时用于读和写. 缓冲区是一个容器,它包含将要写入或者刚读出的数据.使用通道进行读写时都要经过缓冲区. 使用NIO写入文件,可以通过文件流获取通道 FileOutputStream outputStream=new

nio学习1

nio学习设计的几个概念要弄清楚 我们常常见到同步.异步.阻塞和非阻塞四种调用方式.这些方式彼此概念并不好理解.下面是我对这些术语的理解. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等).但是一般而言,我们在说同步.异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务.最常见的例子就是 SendMessage.该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回.当

NIO学习笔记1

NIO引入了三个概念: Buffer 缓冲区 Channel 通道 selector 选择器 1.java.io优化建议 操作系统与Java基于流的I/O模型有些不匹配.操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA)的协助下完成的.I/O类喜欢操作小块数据——单个字节.几行文本.结果,操作系统送来整缓冲区的数据,java.io的流数据类再花大量时间把它们拆成小块,往往拷贝一个小块就要往返于几层对象.操作系统喜欢整卡车地运来数据,java.io类则喜欢一铲子一铲子地加

Java NIO学习

Java NIO学习 为什么要使用New IO? NIO是jdk1.4加入的新包,NIO的创建目的是为了让java程序员可以实现高速I/O而无需编写自定义的本机代码.NIO将最耗时的I/O操作(即填充和提取缓冲区)转移到操作系统 ,因而可极大的提高速度. 流与块的比较 原来的I/O库与NIO最重要区别是数据打包和传输方式.原来的I/O以流的方式处理数据,而NIO以块的方式处理数据. 面向流的I/O系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据.不利的一面是

我的NIO学习笔记

一.文章来由 研究Nio也有几天了,在网上看了很多文章,给人整体的感觉就是,一个原本简简单单的东西,被说的好复杂.或者是类似 http://ifeve.com/selectors/ 这种百科全书式的教你如何用接口,这种文章看似介绍了每个函数,面面俱到,却很难串起来. 但是人学东西本来就是一个感性认识到理性认识的过程,如果看到的都是单点,怎么在脑海中形成一张图? (1)是什么(功能) (2)为什么这么设计(应用场景) (3)怎么实现的(具体代码) 这三个问号搞完了以后,才是如何去使用,不能本末倒置

NIO学习系列:核心概念及基本读写

1.    引言    I/O流或者输入/输出流指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.新的输入/输出(NIO)库是在JDK 1.4中引入的.NIO弥补了原来的I/O的不足,它在标准Java代码中提供了高速的.面向块的I/O.   原来的I/O库与NIO最重要的区别是数据打包和传输的方式的不同,原来的 I/O 以流 的方式处理数据,而 NIO 以块 的方式处理数据.    面向流的I/O系统一次一个字节地处理数据.一个输入流产生一个字节的数据,一个输出流消费一个字节的数