java 7-nio异步I/O-将来式和回调式
java7中三个异步通道
1.AsynchronousFileChannle:用于文件I/O
2.AsynchronousSockeChannle:用于套接字I/O,支持连接超时
3.AsynchronousServerSocketChannle:用于套接字接收异步连接
一.将来式
试用场景:需要读取文件的过程中还要做其他的事情。
  
代码演示:
public static void main(String[] args) {
        Path path = Paths.get("C:\\Users\\Administrator\\Desktop\\api\\Java程序员修炼之道.pdf");
        try {
            AsynchronousFileChannel asynchronousFileChannel = AsynchronousFileChannel.open(path);
            ByteBuffer buffer = ByteBuffer.allocate(100_000_0);
            Future<Integer> result = asynchronousFileChannel.read(buffer, 0);
            //do something
            while (!result.isDone()) {
                System.out.println("test");
            }
            //结果
            Integer byteLen = result.get();
            System.out.println("bytes read="+byteLen);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
二.回调式
试用场景:在I/O操作刚一成功或一失败时,需要马上采取行动,此时需要回调式I/O操作

代码:
public static void main(String[] args) {
        Path file = Paths.get("C:\\Users\\Administrator\\Desktop\\api\\Java程序员修炼之道.pdf");
        try {
            ByteBuffer buffer = ByteBuffer.allocate(100_000);
            AsynchronousFileChannel channle = AsynchronousFileChannel.open(file);
            channle.read(buffer, 0, buffer, new CompletionHandler<Integer, ByteBuffer>() {
                @Override
                public void completed(Integer result, ByteBuffer attachment) {
                    System.out.println("bytes read="+result);
                }
                @Override
                public void failed(Throwable exc, ByteBuffer attachment) {
                    System.out.println("test"+exc.getMessage());
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
java 7-nio异步I/O-将来式和回调式的更多相关文章
- java的高并发IO原理,阻塞BIO同步非阻塞NIO,异步非阻塞AIO
		原文地址: IO读写的基础原理 大家知道,用户程序进行IO的读写,依赖于底层的IO读写,基本上会用到底层的read&write两大系统调用.在不同的操作系统中,IO读写的系统调用的名称可能不完 ... 
- JAVA NIO学习记录2-非阻塞式网络通信
		一.阻塞与非阻塞 传统的IO 流都是阻塞式的.也就是说,当一个线程调用read() 或write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务.因此,在完成网络通信 ... 
- 同步异步阻塞非阻塞Reactor模式和Proactor模式 (目前JAVA的NIO就属于同步非阻塞IO)
		在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ... 
- java网络通信:异步非阻塞I/O (NIO)
		转: java网络通信:异步非阻塞I/O (NIO) 首先是channel,是一个双向的全双工的通道,可同时读写,而输入输出流都是单工的,要么读要么写.Channel分为两大类,分别是用于网络数据的S ... 
- 漫谈NIO(2)之Java的NIO
		1.前言 上章提到过Java的NIO采取的是多路IO复用模式,其衍生出来的模型就是Reactor模型.多路IO复用有两种方式,一种是select/poll,另一种是epoll.在windows系统上使 ... 
- 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别
		1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ... 
- java BIO NIO IO
		参考 https://www.cnblogs.com/zedosu/p/6666984.html 摘要: 关于BIO和NIO的理解 最近大概看了ZooKeeper和Mina的源码发现都是用Java N ... 
- Java中NIO的简单介绍
		NIO基本介绍 Java NIO(New IO) 也有人称之为Java non-blocking IO 是从Java1.4版本开始引入的一个新的IO API,可以代替标准的IO API.NIO与原来的 ... 
- Java:NIO 学习笔记-3
		Java:NIO 学习笔记-3 根据 黑马程序员 的课程 JAVA通信架构I/O模式,做了相应的笔记 3. JAVA NIO 深入剖析 在讲解利用 NIO 实现通信架构之前,我们需要先来了解一下 NI ... 
随机推荐
- cell点击按钮崩的一种情况
			这个错误表示:该类方法没有addBtnClick对应的方法: bug的复现:创建一个cell,并且添加一个类方法来赋值,在方法中,给按钮添加一个点击事件(addBtnClick),但是,再实现这个方法 ... 
- extjs 4.2 日期控件 选择时分秒功能
			因为不支持时分秒,然后在网上也找了一段时间的插件,但是感觉起来都不大方便,最后找一个插件,只需要引用js文件,然后修改类型,就可以实现extjs下面的datafield带时分秒功能了. 步骤: 只需要 ... 
- php js表单登陆验证
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ... 
- UVALive 7148 LRIP【树分治+线段树】
			题意就是要求一棵树上的最长不下降序列,同时不下降序列的最小值与最大值不超过D. 做法是树分治+线段树,假设树根是x,y是其当前需要处理的子树,对于子树y,需要处理出两个数组MN,MX,MN[i]表示以 ... 
- java jdbc数据库操作
			package shb.java.demo3; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQ ... 
- Repeater 时间格式化
			Repeater 时间格式化 <%# Eval("AboutDate","{0:yyyy-MM-dd hh:mm:ss}")%> 个人认为最好用 ... 
- linux-统计一个文件中出现的单词数
			#!/bin/bash ] then echo "Usage: $0 filename"; exit - fi filename=$ egrep -o "\b[[:alp ... 
- full_case & parallel_case
			case中的full_case与parallel_case讨论: 1)术语介绍: 整个case模块叫做:case_statement,注释部分叫做case_statement_header case ... 
- iptables的四表五链
			iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables.真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构. iptables包含4个表, ... 
- 15、Jdbc的优化(BeanUtils组件)
			Jdbc的优化! BeanUtils组件 自定义一个持久层的框架 DbUtils组件 案例优化 1. BeanUtils组件 1.1 简介 程序中对javabean的操作很频繁, 所以apach ... 
