`
lixjluck
  • 浏览: 104355 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

20110801

 
阅读更多

java se 7 AIO的实现

 

windows基于IOCP(input/output Completion Port,I/O完成端口它是应用程序使用线程池处理异步I/O请求的一种机制.

 

linux基于epoll (EpollPort)

 

编程模型

AIO模型相对于之前的编程模型,更加简便,且把线程池隐藏在内部实现中。

 

服务器端

 

channelGroup = AsynchronousChannelGroup.withFixedThreadPool(Runtime.getRuntime().availableProcessors(),
                                                                    Executors.defaultThreadFactory());

 final AsynchronousServerSocketChannel listener = openChannel(channelGroup);
        listener.setOption(StandardSocketOptions.SO_REUSEADDR, true);
        listener.bind(new InetSocketAddress(port));


        listener.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {

            @Override
            public void completed(AsynchronousSocketChannel result, Void attachment) {
                // request a new accept and handle the incoming connection
                listener.accept(null, this);
                System.out.println("new connection" + result);
                handleNewConnection(result);
            }

            @Override
            public void failed(Throwable exc, Void attachment) {
            }
        });
handleNewConnection
        ByteBuffer input = ByteBuffer.allocate(256);
        if (!channel.isOpen()) {
            return;
        }
        channel.read(input, input, completionHandler);
 

 

客户端

 

AsynchronousChannelGroup group;
        try {
            group = AsynchronousChannelGroup.withFixedThreadPool(2, Executors.defaultThreadFactory());

            final AsynchronousSocketChannel asc = AsynchronousSocketChannel.open(group);

            asc.connect(new InetSocketAddress(InetAddress.getByName("localhost"), 5000), null,
                        new CompletionHandler<Void, Void>() {

                            /*
                             * (non-Javadoc)
                             * @see java.nio.channels.CompletionHandler#completed(java.lang.Object, java.lang.Object)
                             */
                            @Override
                            public void completed(Void result, Void attachment) {
                                System.out.println("connected server.");

                            }

                            /*
                             * (non-Javadoc)
                             * @see java.nio.channels.CompletionHandler#failed(java.lang.Throwable, java.lang.Object)
                             */
                            @Override
                            public void failed(Throwable exc, Void attachment) {
                                // TODO Auto-generated method stub

                            }

                        });

            // 8K
            ByteBuffer bb = ByteBuffer.allocate(2 * 1024);
            asc.read(bb, bb, new CompletionHandler<Integer, ByteBuffer>() {

                /*
                 * (non-Javadoc)
                 * @see java.nio.channels.CompletionHandler#completed(java.lang.Object, java.lang.Object)
                 */
                @Override
                public void completed(Integer result, ByteBuffer bb) {
                    System.out.println(new String(bb.array(), 0, result));

                    bb.flip();
                    asc.read(bb, bb, this);
                }

                /*
                 * (non-Javadoc)
                 * @see java.nio.channels.CompletionHandler#failed(java.lang.Throwable, java.lang.Object)
                 */
                @Override
                public void failed(Throwable exc, ByteBuffer attachment) {
                    // TODO Auto-generated method stub

                }

            });

            byte[] bytes = new byte[1024];
            int result = System.in.read(bytes);

            ByteBuffer bb1 = ByteBuffer.wrap(bytes, 0, result);

            asc.write(bb1, bb1, new CompletionHandler<Integer, ByteBuffer>() {

                /*
                 * (non-Javadoc)
                 * @see java.nio.channels.CompletionHandler#completed(java.lang.Object, java.lang.Object)
                 */
                @Override
                public void completed(Integer result, ByteBuffer attachment) {
                    byte[] bytes = new byte[1024];
                    try {
                        int result1 = System.in.read(bytes);

                        ByteBuffer bb1 = ByteBuffer.wrap(bytes, 0, result1);

                        asc.write(bb1, bb1, this);

                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                }

                /*
                 * (non-Javadoc)
                 * @see java.nio.channels.CompletionHandler#failed(java.lang.Throwable, java.lang.Object)
                 */
                @Override
                public void failed(Throwable exc, ByteBuffer attachment) {
                    // TODO Auto-generated method stub

                }

            });

            // group.shutdownNow();
            // group.awaitTermination(1, TimeUnit.SECONDS);
分享到:
评论

相关推荐

    Delphi7_Lite_Full_Edition_7.3.4.3_Build_20110801.rar

    这款版本号为7.3.4.3,Build 20110801的Delphi 7 Lite,以其强大的集成开发环境(IDE)和高效的编译器闻名,为无数程序员提供了高效、便捷的编程体验。 Delphi,源自于Pascal语言,由Borland公司(后被Embarcadero ...

    小贝程序员生活\课件\jsp\20110801.rar

    【标题】"小贝程序员生活\课件\jsp\20110801.rar" 暗示了这是一个关于JavaServer Pages(JSP)技术的课程资料压缩包,可能包含了2011年8月1日的课程内容。JSP是Java平台上的动态网页开发技术,它允许开发者在HTML...

    最土团购程序CV2.0_20110801直装版

    程序版本:ZuituGo_CV2.0_20110801_tuanzbao 更新时间: 2011.08.03 文件大小: 2.8MB 操作系统:Linux/FreeBSD/Unix及Windows 2000/2003均可 程序支持:PHP5/MYSQL5(推荐使用5.2系列最新版本) 模块支持:PHP...

    Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.rar

    这个版本,即7.3.4.3 Build 20110801,是Delphi 7 Lite的全面增强版,集成了更多功能和优化,使得开发者能够更加便捷地进行软件开发。 Delphi 7 的核心在于它的VCL库,这是一个为Windows应用程序设计的组件库。VCL ...

    最土2.0团购系统20110801版本,带分类功能

    综上所述,最土2.0团购系统20110801版本是一款具备完善分类功能、高可用性和良好用户体验的团购平台解决方案。它的设计和实施充分考虑了商家和用户的需求,致力于提供一个高效、稳定的团购环境。而通过持续的技术...

    NFECore2(2.0r0.23_20110801).rar (834.16 KB)

    NFECore2是一款针对特定行业或领域开发的软件核心组件,其版本号为2.0r0.23,发布日期为2011年8月1日。这个压缩包包含了一个名为"NFECore2"的文件,这可能是该软件的主要可执行文件或者库文件,用于实现特定的功能或...

    PHP手册(最新评论整合版)20110801第一分卷

    PHP手册(最新评论整合版)20110801

    PHP手册(最新评论整合版)20110801第二分卷

    PHP手册(最新评论整合版)20110801

    最土CV2.0商业8月全部更新(ZuituGo_Patch_CV2.0_20110701_20110801)

    最土8月商业会员更新包整理 1、更改新浪微博、腾讯登录方式,支持绑定与新建用户. 2、更改用户发送优惠券时可填写手机号....4、更改切换城市多城市时按首字母排序....5、新增代金券、充值卡管理员权限....

    最土20110901升级包

    "最土20110901升级包"是一个针对名为"最土"的软件进行更新的补丁程序,其全称为"ZuituGo_Patch_CV2.0_20110801_20110901"。这个补丁的发布日期为2011年9月1日,表明它是为解决或增强从2011年8月1日至2011年9月1日...

    Delphi7_Lite_Full_Edition_7.3.4.3

    Delphi 7 Lite Full Edition的安装文件"Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe"是用户获取此版本的关键。安装过程中,系统会自动检测硬件配置并进行适配,同时包含必要的编译器、调试器、源...

    Delphi7_7.3.4.3

    提供的".md5"文件是用于验证下载文件完整性的,确保用户下载的"Delphi7_Lite_Full_Edition_Setup_7.3.4.3_Build_20110801.exe"文件没有被篡改,保证了安装包的原始性和安全性。 8. **截图资源**: 图片文件("....

    Delphi 7 Lite Edition v7.3 [集成SP1.1] [可选D2007 RTL/VCL] [安装版/绿色版二合一][含备份/恢复已安装控件信息专家CnWizards]

    ### Delphi 7 Lite Edition v7.3 版本概览 #### 一、产品概述 Delphi 7 Lite Edition v7.3 是一个高度精简但功能强大的开发工具包,专为那些需要轻量级解决方案同时又不希望牺牲太多功能的开发者设计。...

    仿猛买网最土团购模板

    首页分类效果,自动调用,可控制单独分类数目 增加先行赔付页面,后台可以添加内容 增加头部公告头部flash广告 效果图在最后 使用说明 1、请先确认你的版本号,你的程序为官方原版未作...最土2.0团购系统20110801

    卡巴斯基反病毒Windows服务器6.0加强版 key 序列号

    FS_20110801_06120C8E(v30)可能是该版本的特定更新文件或安装文件,其中“FS”可能代表“File Server”,表示与服务器相关的更新;“20110801”可能是文件创建或更新的日期;“06120C8E”可能是文件的唯一标识符;...

    风盾防火墙 Build 20120703 sp1

    20110801封最新变异CC攻击,此版为重要更新,请所有用户升级~! 加入网站防CC白名单 ,可单独设置放行网站域名 可以具体到某个文件 1.修正部分内存错误 2.WEB防御模块加入验证码机制 Tags: 风盾防火墙 cc防火墙 ...

    技术周报,DO基本知识

    【yzh20110801-0805周报.rtf】 这份RTF文档可能记录了2011年8月第一周至第五周的周报内容,主要关注DO业务的日常操作和维护,比如数据导入导出流程、数据安全措施、性能监控和优化,以及1X业务的网络性能分析、故障...

    javascript 时间滑动条

    在提供的压缩包"timeSlider(JS时间滑条控件)(20110801)"中,可能包含了实现上述功能的源代码、示例和文档。通过学习和研究这些文件,你可以深入理解如何在项目中实现和自定义JavaScript时间滑动条。

    10个HTML5游戏框架

    8. **TJMJ_014_20110801.zip**:这个文件名看起来像是特定版本的某个游戏项目,可能是桌面游戏或者麻将游戏的框架,包含游戏规则的实现和用户界面的设计。 9. **dad-engine_v0.2a.zip**:“Dad Engine”可能是一个...

    最土团购8.01补丁

    最土团购8.01补丁是针对"最土团购"这一软件的更新补丁,其全称为ZuituGo_Patch_CV2.0_20110701_20110801。这个补丁主要针对2.0版本的最土团购软件,在2011年7月1日至2011年8月1日期间发布的,目的是修复在这段时间内...

Global site tag (gtag.js) - Google Analytics