`
liuzhaomin
  • 浏览: 204844 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

MultiPortEcho ibm dw nio入门异步io的例子

阅读更多

ibm dw nio入门异步io的例子

 

package com.ls.java.newio;

import java.io.*;
import java.net.*;
import java.nio.*;
import java.nio.channels.*;
import java.util.*;

public class MultiPortEcho {
	private int ports[];
	private ByteBuffer echoBuffer = ByteBuffer.allocate(1024);

	public MultiPortEcho(int ports[]) throws IOException {
		this.ports = ports;

		go();
	}

	private void go() throws IOException {
		// Create a new selector
		Selector selector = Selector.open();

		// Open a listener on each port, and register each one
		// with the selector
		for (int i = 0; i < ports.length; ++i) {
			ServerSocketChannel ssc = ServerSocketChannel.open();
			ssc.configureBlocking(false);
			ServerSocket ss = ssc.socket();
			InetSocketAddress address = new InetSocketAddress(ports[i]);
			ss.bind(address);

			SelectionKey key = ssc.register(selector, SelectionKey.OP_ACCEPT);

			System.out.println("Going to listen on " + ports[i]);
		}

		while (true) {
			int num = selector.select();

			Set selectedKeys = selector.selectedKeys();
			Iterator it = selectedKeys.iterator();

			while (it.hasNext()) {
				SelectionKey key = (SelectionKey) it.next();

				if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {
					// Accept the new connection
					ServerSocketChannel ssc = (ServerSocketChannel) key
							.channel();
					SocketChannel sc = ssc.accept();
					sc.configureBlocking(false);

					// Add the new connection to the selector
					SelectionKey newKey = sc.register(selector,
							SelectionKey.OP_READ);
					it.remove();

					System.out.println("Got connection from " + sc);
				} else if ((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {
					// Read the data
					SocketChannel sc = (SocketChannel) key.channel();

					// Echo data
					int bytesEchoed = 0;
					while (true) {
						echoBuffer.clear();

						int r = sc.read(echoBuffer);

						if (r <= 0) {
							break;
						}

						echoBuffer.flip();

						sc.write(echoBuffer);
						bytesEchoed += r;
					}

					System.out.println("Echoed " + bytesEchoed + " from " + sc);

					it.remove();
				}

			}

			// System.out.println( "going to clear" );
			// selectedKeys.clear();
			// System.out.println( "cleared" );
		}
	}

	static public void main(String args[]) throws Exception {
		if (args.length <= 0) {
			System.err
					.println("Usage: java MultiPortEcho port [port port ...]");
			System.exit(1);
		}

		int ports[] = new int[args.length];

		for (int i = 0; i < args.length; ++i) {
			ports[i] = Integer.parseInt(args[i]);
		}

		new MultiPortEcho(ports);
	}
}
 

 

 

 

分享到:
评论

相关推荐

    NIO学习系列:连网和异步IO

    本篇文章将深入探讨NIO在连网和异步IO方面的应用,以及如何通过源码理解和实践相关技术。 首先,我们了解NIO的核心概念。NIO不同于传统的IO模型(即BIO,Blocking IO),它引入了通道(Channel)和缓冲区(Buffer)...

    IBM Java文档库 NIO 入门

    《IBM Java文档库 NIO 入门》这篇教程主要针对的是Java 1.4引入的New Input/Output (NIO)库,这是一个重要的更新,旨在提高Java程序的I/O性能,特别是面向块的I/O操作。NIO弥补了传统I/O(基于java.io.*包)的不足,...

    网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    - **AIO(Asynchronous IO)**:也称为NIO.2,它提供了异步I/O操作,进一步提升了处理能力,使得程序无需等待I/O操作完成即可继续执行。 4. IO模型的选择: - 对于需要高并发、低延迟的服务器应用,如聊天服务器...

    nio入门 IBM教材,pdf格式

    ### NIO 入门知识点详解 #### 一、NIO 的引入及其背景 - **NIO 的起源**:NIO(New Input/Output)库是在 JDK 1.4 中引入的,旨在解决传统 Java I/O 操作的局限性和性能瓶颈。 - **改进目标**:NIO 通过提供高速...

    基于异步IO的socket通信程序

    Java中的NIO(New IO)框架,尤其是`java.nio.channels`包中的`Selector`和`Channel`接口,提供了异步I/O的能力。 在标题所提及的“基于异步IO的socket通信程序”中,我们可以推测有以下三个主要部分: 1. **...

    NIO与传统IO代码区别实例

    在Java编程领域,IO(Input/Output)和NIO(Non-blocking Input/Output)是两种不同的I/O模型,它们在处理数据输入和输出时有着显著的差异。本教程旨在帮助NIO初学者理解这两种模型的核心概念及其实际应用,通过具体...

    ibm的nio教程

    标题 "IBM的NIO教程" 暗示了我们即将探讨的是Java编程中的非阻塞I/O(Non-blocking Input/Output)技术,特别是在IBM平台上如何使用。NIO是Java平台中用于替代传统I/O(BIO)的一种机制,它允许程序在等待数据传输时...

    Java NIO:浅析IO模型_动力节点Java学院整理

    Java NIO:浅析IO模型 Java NIO是Java语言中用于高性能I/O操作的API,理解IO模型是学习Java NIO的基础。本文将从同步和异步的概念开始,然后介绍阻塞和非阻塞的区别,接着介绍阻塞IO和非阻塞IO的区别,最后介绍五种...

    java NIO异步框架

    NIO与传统的IO(-blocking I/O)相比,最大的区别在于它支持异步非阻塞的I/O操作,这意味着在进行读写操作时,程序不会被阻塞,可以继续执行其他任务,从而提高了系统的整体效率。 在Java NIO中,主要有以下关键...

    同步、异步IO

    在Java中,NIO(New IO)就是一种支持异步IO的方式。NIO引入了选择器(Selector)和通道(Channel)的概念,允许单线程处理多个通道的IO事件。例如,服务器可以注册多个客户端连接到同一个选择器,当有数据到达时,...

    NIO与传统IO的区别共9页.pdf.zip

    - **NIO**:提供了异步IO操作,比如AsynchronousFileChannel,允许异步读写文件。 8. **效率与可扩展性** - **NIO**:在高并发场景下,由于其非阻塞和多路复用特性,通常比传统IO模型更高效,具有更好的可扩展性...

    Java NIO入门

    IBM的NIO入门教程通常会涵盖这些基础概念,并通过实例演示如何使用NIO进行实际的I/O操作。教程可能还会深入讲解NIO的高级特性,如scatter/gather(分散/聚集)读写,以及如何使用`Selector`进行多路复用。通过学习这...

    nio.zip_NIO_NewIO_NIO.c_java NIO chm_java nio

    NIO(New IO)是Java平台中用于处理输入/输出操作的一种高级API,它在Java 1.4版本中引入,以替代传统的IO流模型。NIO提供了更高效、更灵活的数据传输方式,尤其适用于高并发和大数据量的场景。 在Java的NIO体系中...

    用nio实现异步连接池

    ### 使用Java NIO实现异步连接池的关键知识点 #### 异步连接池的诞生背景与重要性 在现代Web应用程序开发中,为了提升系统性能和响应速度,常连接与连接池技术成为不可或缺的一部分。常连接是指一个持久存在的TCP...

    自己封装的IO核NIO

    在IT行业中,输入/输出(IO)和网络IO(NIO)是编程中不可或缺的部分,尤其是在处理大量数据传输和网络通信时。Java平台提供了丰富的IO和NIO API,但它们的使用往往相对复杂,需要对底层机制有深入理解。本文将详细...

    IO和NIO区别

    IO和NIO区别 Java 中的 IO 和 NIO 是两个不同的输入/输出机制,它们之间有许多区别。下面我们将详细讲解 IO 和 NIO 的区别。 1. 数据处理方式 标准 IO 以流的方式处理数据,也就是说数据是以流的形式传输的,而 ...

    java nio与io性能测试

    Java NIO(New IO)是Java 1.4引入的一个新模块,它是对传统IO(Input/Output)的扩展,提供了更高效的数据传输方式。在Java IO中,数据的读写是通过流进行的,而NIO则引入了通道(Channel)和缓冲区(Buffer)的...

    NIO入门pdf分享

    《NIO入门》一书是理解Java NIO(New Input/Output)的重要参考资料,NIO在Java编程中扮演着至关重要的角色,特别是在处理高并发、大数据传输等场景下。本PDF文档将引领读者深入理解这一核心概念。 NIO,全称New ...

    3种下载文件程序的思考,为何使用NIO进行异步网络通讯

    标题中的“3种下载文件程序的思考,为何使用NIO进行异步网络通讯”提示了我们探讨的主题,即网络通信中的不同下载策略以及为何选择非阻塞I/O(Non-blocking I/O, NIO)作为异步通信的方式。在这个话题中,我们将深入...

    NIO 入门.chm,NIO 入门.chm

    **NIO(New Input/Output)是Java编程语言中用于替代标准I/O(BIO,Blocking I/O)的一组API,它提供了非阻塞式的I/O操作方式,极大地提升了Java在处理I/O密集型应用时的性能。NIO在Java 1.4版本中被引入,之后在...

Global site tag (gtag.js) - Google Analytics