
JavaIO BIO/NIO/AIO
零度anngle
情商不是八面玲珑的圆滑,而是德行具足后的虚心、包容和自信;成熟不是单纯到复杂的世故,而是复杂回归简单的超然;觉悟不是对世事的无所谓,而是对无能为力之事的坦然接受;成功不是追求别人眼中的最好,而是把自己能做的事情做得最好。热爱生活,热爱编程,热爱Java,喜欢探索,纸上得来终觉浅,绝知此事要躬行,愿与你一起在技术的海洋中成长!
博客:http://blog.csdn.net/zmx729618
展开
-
JAVA中对BIO,NIO,AIO的理解
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式解释下这几个名词。如有不足之处,还望告知。转载 2016-07-05 10:53:40 · 616 阅读 · 0 评论 -
Java NIO 简单教程
Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据转载 2017-01-13 14:01:02 · 633 阅读 · 0 评论 -
Java NIO示例:多人网络聊天室
一个多客户端聊天室,支持多客户端聊天,有如下功能:功能1: 客户端通过Java NIO连接到服务端,支持多客户端的连接功能2:客户端初次连接时,服务端提示输入昵称,如果昵称已经有人使用,提示重新输入,如果昵称唯一,则登录成功,之后发送消息都需要按照规定格式带着昵称发送消息功能3:客户端登录后,发送已经设置好的欢迎信息和在线人数给客户端,并且通知其他客户端该客户端上线功能4:服务器收到已登录转载 2017-01-17 16:41:32 · 574 阅读 · 0 评论 -
JAVA NIO 服务器与客户端实现示例(代码1)
公共类:[java] view plain copy print?package com.stevex.app.nio; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.CharacterCodingException; import转载 2017-01-17 16:47:12 · 6763 阅读 · 0 评论 -
JAVA AIO 服务器与客户端实现示例(代码2)
AIO用于文件处理还是比较快乐的,但用AIO来写网络消息处理服务器端与客户端是比较麻烦的事情,当然这只是我个人意见,主要是有几点原因:一是AIO需要操作系统支持,还好Windows与Linux(模拟)都支持;二是AIO同时使用递归调用和异步调用容易把程序员搞晕,代码容易出错;三是CompletionHandler会使用单独的线程跑,容易出现多线程问题,频繁线程上下文切换比较转载 2016-11-15 14:27:57 · 3178 阅读 · 0 评论 -
基于Java NIO的Socket通信
Java NIO模式的Socket通信,是一种同步非阻塞IO设计模式,它为Reactor模式实现提供了基础。下面看看,Java实现的一个服务端和客户端通信的例子。NIO模式的基本原理描述如下:服务端打开一个通道(ServerSocketChannel),并向通道中注册一个选择器(Selector),这个选择器是与一些感兴趣的操作的标识(SelectionKey,即通过这个标识可以定位到转载 2017-01-17 17:06:13 · 514 阅读 · 0 评论 -
Java IO最详解
初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见。首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!) 这是java io 比较基本的一些处理流,除此之外我们还会提到一些比转载 2017-04-14 11:00:43 · 699 阅读 · 0 评论 -
Java网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端。 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用到一个计算结果的工具类,见文章代码部分。 相关的基础知识文章推荐: Linux 网络 I/转载 2017-05-26 17:45:58 · 710 阅读 · 0 评论 -
java socket实现文件传输分别基于BIO、NIO、AIO实现
为了加强对socket及java IO流编程的回顾,本文作了一个文件传输的实例。针对java不同对IO流的不同实现,本文也分别基于BIO、NIO、AIO实现三种传输,同时本文采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流包装缓冲流,加快传输的速度。最后本文基于大文件对三种方式基本传输效率对比。对于每一种传输方式分别实现服务端和客户端,并通过服务端发送文件到客户端,(同理可以实现客户原创 2017-04-14 15:03:11 · 1896 阅读 · 0 评论 -
Java NIO读/写入文件
前言Java NIO(new/inputstream outputstream)使用通道、缓冲来操作流,所以要深刻理解这些概念,尤其是,缓冲中的数据结构(当前位置(position)、限制(limit)、容量(capacity)),这些知识点要通过写程序慢慢体会。NIO vs 传统IONIO是面向缓冲、通道的;传统IO面向流通道是双向的既可以写、也可以转载 2017-09-25 14:48:04 · 1871 阅读 · 0 评论 -
Java异步I/O编程实现的两种方式:将来式和回调式
package org.zwc.test;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.AsynchronousFileChannel;import java.nio.channels.CompletionHandler;import java.nio.file.Path;原创 2017-12-28 11:02:36 · 2411 阅读 · 0 评论 -
Java AIO的Socket Demo
同步\异步操作 | 阻塞IO\非阻塞IO理解: 同步阻塞 同步非阻塞 异步非阻塞 [java] view plain copy package com.vdebug.aio.socket; import java.io.IOException; im转载 2016-11-15 15:15:52 · 2906 阅读 · 0 评论 -
关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结
IO基本概念Linux环境Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设备的操作都可以看做对文件进行操作。我们对一个文件的读写,都通过调用内核提供的系统调用;内核给我们返回一个file descriptor(fd,文件描述符)。对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符)。描述符就是一个数字(可以理解为一个索转载 2016-11-11 10:37:53 · 854 阅读 · 0 评论 -
关于Epoll的通俗理解
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 现在我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没转载 2016-11-11 10:04:10 · 1020 阅读 · 0 评论 -
Java NIO原理图文分析及代码实现
一.java NIO 和阻塞I/O的区别1. 阻塞I/O通信模型假如现在你对阻塞I/O已有了一定了解,我们知道阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时(或超时)才会返回;同样,在调用ServerSocket.accept()方法时,也会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会启动一个线程去处理该客户端的请求。原创 2016-07-08 09:35:01 · 10689 阅读 · 0 评论 -
Java NIO之Selector的使用
看了下关于Selector的使用方法,官方的说法是一个“多路复用器”,从我自己的角度来讲就感觉像一个服务总线,负责统一各个处理程序的消息注册,统一接收客户端或服务器消息信息,再分发给不同的事件处理程序进行处理。整个流程就一个注册->接收->处理的过程,从使用者的角度来讲,直接使用这些api还不太成熟,毕竟这些api都太底层了,需要了解太多的技术细节,也不太适合像我这种不了解C语言网络编程的人。这周转载 2016-07-08 11:10:23 · 5261 阅读 · 3 评论 -
JAVA IO与NIO优劣浅析
NIO 设计背后的基石:反应器模式,用于事件多路分离和分派的体系结构模式。 反应器(Reactor):用于事件多路分离和分派的体系结构模式 通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞 与非阻塞 。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止。而对于非阻塞转载 2016-07-08 11:24:39 · 5666 阅读 · 0 评论 -
JAVA NIO使用非阻塞模式实现高并发服务器
Java自1.4以后,加入了新IO特性,NIO. 号称new IO. NIO带来了non-blocking特性. 这篇文章主要讲的是如何使用NIO的网络新特性,来构建高性能非阻塞并发服务器.文章基于个人理解,我也来搞搞NIO.,求指正.在NIO之前服务器还是在使用阻塞式的java socket. 以Tomcat最新版本没有开启NIO模式的源码为例, tomcat会acc转载 2016-07-08 14:30:42 · 10304 阅读 · 0 评论 -
Java NIO 反应器(Reactor)模式
一、概述Java NIO非堵塞技术实际是采取反应器模式,或者说是观察者(observer)模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。同步和异步区别 : 有无通知(是否轮询)堵塞和非堵塞区别 : 操作结果是否等待(是否马上又返回值),只是设计方式的不同。NIO 有一个主转载 2016-07-08 14:50:25 · 4395 阅读 · 0 评论 -
JAVA NIO API简介
1. 基本 概念IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )2. Java 标准 io 回顾Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层转载 2016-07-08 15:35:30 · 1054 阅读 · 0 评论 -
Java NIO使用及原理分析(一)
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了。本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念。在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统转载 2016-07-08 16:15:34 · 571 阅读 · 0 评论 -
Java NIO使用及原理分析(二)
在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的变化。本文为NIO使用及原理分析的第二篇,将会分析NIO中的Buffer对象。在缓冲区中,最重要转载 2016-07-08 16:28:05 · 607 阅读 · 0 评论 -
Java NIO使用及原理分析(三)
在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。缓冲区的分配在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调用 allocate()相当于创建了一个指定大小的数组,并把它包装为缓冲转载 2016-07-08 16:37:59 · 833 阅读 · 0 评论 -
Java NIO使用及原理分析(四)
在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request),服务器会为每个客户端请求建立一个线程,由该线程单独负责处理一个客户请求。这种模式带来的一个问题就转载 2016-07-08 17:10:02 · 550 阅读 · 0 评论 -
Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
原文出处:http://blog.csdn.net/anxpp/article/details/51512200 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端。代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就能更容易理解,代码中会用到一个计算结果的工转载 2018-02-28 09:34:16 · 363 阅读 · 0 评论