zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    如果有使用请标明来源:http://www.cnblogs.com/duwenlei/
  • 相关阅读:
    居中方法
    12个css实用技巧
    display元素来布局
    伪元素::before与:after
    弹性布局
    输入框下拉菜单
    HTMLinput日期输入类型
    模块XXXX可能与您正在运行的Windows版本不兼容。检查该模块是否与regsvr32.exe的x86(32位)x64(64位)版本兼容。
    Epoll为我们带来了什么
    C内存管理相关内容--取自高质量C++&C编程指南
  • 原文地址:https://www.cnblogs.com/duwenlei/p/4350229.html
Copyright © 2011-2022 走看看