Java AIO 入门实例(转)
Java7 AIO入门实例,首先是服务端实现:
服务端代码
SimpleServer:
- public class SimpleServer {
- public SimpleServer(int port) throws IOException {
- final AsynchronousServerSocketChannel listener = AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(port));
- listener.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {
- public void completed(AsynchronousSocketChannel ch, Void att) {
- // 接受下一个连接
- listener.accept(null, this);
- // 处理当前连接
- handle(ch);
- }
- public void failed(Throwable exc, Void att) {
- }
- });
- }
- public void handle(AsynchronousSocketChannel ch) {
- ByteBuffer byteBuffer = ByteBuffer.allocate(32);
- try {
- ch.read(byteBuffer).get();
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- byteBuffer.flip();
- System.out.println(byteBuffer.get());
- // Do something
- }
- }
SimpleClient:
- public class SimpleClient {
- private AsynchronousSocketChannel client;
- public SimpleClient(String host, int port) throws IOException, InterruptedException, ExecutionException {
- this.client = AsynchronousSocketChannel.open();
- Future<?> future = client.connect(new InetSocketAddress(host, port));
- future.get();
- }
- public void write(byte b) {
- ByteBuffer byteBuffer = ByteBuffer.allocate(32);
- byteBuffer.put(b);
- byteBuffer.flip();
- client.write(byteBuffer);
- }
- }
写一个简单的测试用例来跑服务端和客户端,先运行testServer(),在运行testClient();
测试用例
AIOTest
- public class AIOTest {
- @Test
- public void testServer() throws IOException, InterruptedException {
- SimpleServer server = new SimpleServer(7788);
- Thread.sleep(10000);
- }
- @Test
- public void testClient() throws IOException, InterruptedException, ExecutionException {
- SimpleClient client = new SimpleClient("localhost", 7788);
- client.write((byte) 11);
- }
- }
因为是异步的,所以在运行server的时候没有发生同步阻塞,在这里我加了一个线程sleep(),如果没有的话,程序会直接跑完回收掉。
http://tigerlchen.iteye.com/blog/1747221
Java AIO 入门实例(转)的更多相关文章
- java rmi 入门实例
java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础 java rmi即java远程接口调用,实现了2台虚拟机之 ...
- Java WebService入门实例
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务. Web Service的关键技术和规则: 1.XML:描述 ...
- Java 注解入门实例 && 注解传參
參考 概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已 ...
- java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)
编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接 ...
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...
- 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!
本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...
- 自学 Java 怎么入门
自学 Java 怎么入门? 595赞同反对,不会显示你的姓名 给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...
- struts入门实例
入门实例 1 .下载struts-2.3.16.3-all .不摆了.看哈就会下载了. 2 . 解压 后 找到 apps 文件夹. 3. 打开后将 struts2-blank.war ...
- Spring中IoC的入门实例
Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...
随机推荐
- A Game of Thrones(14) - Catelyn
Ned and the girls were eight days gone when Maester Luwin came to her one night in Bran’s sickroom, ...
- Android从raw、assets、SD卡中获取资源文件内容
先顺带提一下,raw文件夹中的文件会和project一起经过编译,而assets里面的文件不会~~~ 另外,SD卡获取文件需要权限哦! //从res文件夹中的raw 文件夹中获取文件并读取数据 p ...
- STP学习总结
STP学习总结 STP是广泛应用在二层的具有冗余的网络中用来消除环路的一种机制,当然二层环网中用来消除环路的技术还有RRPP和H3C的smart-link技术等. 一.STP的一些基本概念 STP是I ...
- [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换
[Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...
- linux--文件夹下批量改动IP
sed -i 's/10.11/10.22/g' `grep ir 10.11 *| grep -E'.xml:|.cfg:|.ini:|.wsdl|.properties:' |awk -F:'{p ...
- CF 553A 组合DP
http://codeforces.com/problemset/problem/553/A A. Kyoya and Colored Balls time limit per test 2 seco ...
- Mac 登录界面多了一个其它账户删除
原因分析: 在安装一些软件时会自己主动启用root账户,可是在安装完毕后没有关闭root账户,这样就造成系统以为用户要使用root账户,所以在登录界面出现了一个"其它"账户 解决方 ...
- Python学习入门基础教程(learning Python)--3.2 if-else分支语句
if-else分支语句结构的特点是当conditon条件满足时,执行if下的语句块,当condition条件不满足时执行else下的语句块,也就是说根据条件来控制让某些语句执行,某些语句不被执行. i ...
- python学习笔记之七:魔法方法,属性
在python中,有的名称会在前面和后面加上两个下划线,由这些名字组成的集合所包含的方法称为魔法方法(或者是特殊方法).如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名 ...
- CENTOS安装部署zabbix
果学网 -专注IT在线www.prismcollege.com 參考原文:http://www.showerlee.com/archives/13 RHCE过的EMAIL已经下来.所以近期闲了就准备把 ...