Java AIO 入门实例(转)

Java7 AIO入门实例,首先是服务端实现:

服务端代码

SimpleServer:

Java代码  

  1. public class SimpleServer {
  2. public SimpleServer(int port) throws IOException {
  3. final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(port));
  4. listener.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {
  5. public void completed(AsynchronousSocketChannel ch, Void att) {
  6. // 接受下一个连接
  7. listener.accept(null, this);
  8. // 处理当前连接
  9. handle(ch);
  10. }
  11. public void failed(Throwable exc, Void att) {
  12. }
  13. });
  14. }
  15. public void handle(AsynchronousSocketChannel ch) {
  16. ByteBuffer byteBuffer = ByteBuffer.allocate(32);
  17. try {
  18. ch.read(byteBuffer).get();
  19. } catch (InterruptedException e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. } catch (ExecutionException e) {
  23. // TODO Auto-generated catch block
  24. e.printStackTrace();
  25. }
  26. byteBuffer.flip();
  27. System.out.println(byteBuffer.get());
  28. // Do something
  29. }
  30. }

跟着是客户端实现:

客户端代码

SimpleClient:

Java代码  

  1. public class SimpleClient {
  2. private AsynchronousSocketChannel client;
  3. public SimpleClient(String host, int port) throws IOException, InterruptedException, ExecutionException {
  4. this.client = AsynchronousSocketChannel.open();
  5. Future<?> future = client.connect(new InetSocketAddress(host, port));
  6. future.get();
  7. }
  8. public void write(byte b) {
  9. ByteBuffer byteBuffer = ByteBuffer.allocate(32);
  10. byteBuffer.put(b);
  11. byteBuffer.flip();
  12. client.write(byteBuffer);
  13. }
  14. }

写一个简单的测试用例来跑服务端和客户端,先运行testServer(),在运行testClient();

测试用例

AIOTest

Java代码  

  1. public class AIOTest {
  2. @Test
  3. public void testServer() throws IOException, InterruptedException {
  4. SimpleServer server = new SimpleServer(7788);
  5. Thread.sleep(10000);
  6. }
  7. @Test
  8. public void testClient() throws IOException, InterruptedException, ExecutionException {
  9. SimpleClient client = new SimpleClient("localhost", 7788);
  10. client.write((byte) 11);
  11. }
  12. }

因为是异步的,所以在运行server的时候没有发生同步阻塞,在这里我加了一个线程sleep(),如果没有的话,程序会直接跑完回收掉。

http://tigerlchen.iteye.com/blog/1747221

时间: 2024-10-02 09:02:59

Java AIO 入门实例(转)的相关文章

Java 注解入门实例 &amp;&amp; 注解传参

参考 概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已经过时的方法; @Suppvisewarnings 用于通知java编译器禁止特定的编译警告. 注解按照运行机制划分 源码注解:注解只在源码中存在,编译成.class文件就不存在了: 编译时注解:注解在源码和.class文件中都存在(例:JDK自带注解): 运行时注解:在运行阶段还起作用,甚至会影响运行逻辑

Java AIO 应用实例

项目地址:https://github.com/windwant/aio-test Server: 1 package org.windwant.aio; 2 3 import java.io.IOException; 4 import java.net.InetSocketAddress; 5 import java.nio.ByteBuffer; 6 import java.nio.channels.AsynchronousChannelGroup; 7 import java.nio.ch

java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)

编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接和servlet类之间有两种方式: 1)通过在web.xml文件中进行配置:示例如下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2

Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附详细代码] 标签: SparkECLIPSEJAVAMAVENwindows 2016-06-18 22:35 405人阅读 评论(0) 收藏 举报  分类: spark(5)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 前言 本文旨在记录初学Spark时,根据官网快速

DWR之入门实例(一)

DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-

freemarker入门实例与源码研究准备工作

首先去freemarker官网下载源码jar包,本文是基于freemarker-2.3.21.tar.gz进行研究的.解压源码包,找到freemarker的源码部分导入eclipse工程中.需要注意的是:freemarker的ftl文件解析使用javacc实现的,所以源码中没有解析类(FMParse.java).要想研究freemarker源码,往往还需要引入freemarker.jar(含有FMParse.class),否则源码会出现编译问题.另外,还需要引入的jar包有:commons-lo

Java Annotation入门

Java Annotation入门作者:cleverpig 版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)原 文:[http://www.matrix.org.cn/resource/article/44/44048_Java+Annotation.html]http://www.matrix.org.cn/resource/arti

DWR入门实例(二)

DWR(Direct Web Remoting) DWR is a Java library that enables Java on the server and JavaScript in a browser to interact and call each other as simply as possible. Dwr能让在服务器端的java代码和浏览器客户端的javascript代码尽可能简单的相互调用. DWR is Easy Ajax for Java!  官网:http://d

mybatis 详解(二)------入门实例(基于XML)

通过上一小节,mybatis 和 jdbc 的区别:http://www.cnblogs.com/ysocean/p/7271600.html,我们对 mybatis有了一个大致的了解,下面我们通过一个入门实例来对mybatis有更近一步的了解. 我们用 mybatis 来对 user 表进行增删改查操作. ps:本篇博客源代码链接:http://pan.baidu.com/s/1eSEfc8i密码:j480 1.创建MySQL数据库:mybatisDemo和表:user 这里我们就不写脚本创建