
NIO
Flood_Dragon
勇者无所畏惧 强者自强不息
展开
-
Java NIO系列教程(二) Channel
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:转载 2013-09-05 22:53:56 · 763 阅读 · 0 评论 -
MINA2.0用户手册中文版--第三章 第一节 IoService接口简介
在MINA中,IoService接口提供基础的I/O服务,并负责管理I/O的Sessoin。它是MINA架构中最核心的部分之一,实现IoService的子接口和类,负责了多数低级别I/O操作的处理。IoService的思维导图:我们将会来看IoService接口的职责,以及它的实现类AbstractIoService的情况。第一次使用思维导图的方式来阐释会略有不同,在这之后,我们将翻译 2013-09-11 11:13:52 · 947 阅读 · 0 评论 -
MINA2.0用户手册中文版--第四章 MINA中的Session
在MINA中,session处于核心地位:每当一个客户端连接到服务器上时,一个新的session就会被创建,它会被保存到内存中,直到客户端断开连接。Session被用来保存持久的连接信息,还会附加一些服务器在处理请求时可能需要的任何其他种类的信息,这些信息在session的整个生命周期中都是生效的。Session状态Session的状态会随着时间演变:已连接:s翻译 2013-09-11 11:15:46 · 1107 阅读 · 0 评论 -
MINA2.0用户手册中文版--第二章 第三节 TCP客户端实例
之前我们已经看过了客户端的架构,现在我们来研究一个有代表性的客户端实例作为参考实现,即实例sumup client。我们将排除那些可以直接重复照搬的代码,而只关注最重要的组成部分,以下是这个客户端的核心代码:public static void main(String[] args) throws Throwable { NioSocketConnector connector =翻译 2013-09-11 11:03:07 · 1159 阅读 · 0 评论 -
MINA2.0用户手册中文版--第五章 MINA中的过滤器
过滤器IoFilter是MINA核心结构之一,它扮演着一个很重要的角色。它可以过滤所有在MINA服务和对应处理程序之间的I/O事件和请求。如果你有编写Java网络应用程序的经验,你可以放心的把他当做Servlet过滤器的一个远亲。MINA提供了很多现成的过滤器,它们通过简化典型的横切关注点,来加快网络应用程序的开发步伐,例如:日志过滤器LoggingFilter记录所有事件和请翻译 2013-09-11 11:16:34 · 1082 阅读 · 0 评论 -
MINA2.0用户手册中文版--第六章 MINA中的传输 第一节 基于APR的传输
APR(Apache Protable Runtime Library,Apache可移植运行库)是可以提供很好的可拓展性、性能以及对底层操作系统一致性操作的技术。MINA中提供了APR的通信支持。在这部分,将通过使用一个时间服务器的例子,接触下如何基于APR通信使用MINA。必要前提APR通信依赖下面的组件:APR库 - 下载和安装相应平台的库http://www翻译 2013-09-11 11:21:28 · 851 阅读 · 0 评论 -
MINA2.0用户手册中文版--第六章 MINA中的传输 第二节 基于串行传输
在MINA2.0中,你可以使用串行传输进行连接,就像使用TCP通信那样。获取MINA 2.0可以下载最新版本的的MINA版本。如果想获取其他版本的MINA,如果有什么疑问,可以查看开发者手册。必要前提提示信息:如果想要通过Java程序访问串行端口,需要一个本地库(.DLL 或者 .so 取决于你的操作系统). MINA使用的是RXTX.org这个 : f翻译 2013-09-11 11:22:03 · 1105 阅读 · 0 评论 -
MINA2.0用户手册中文版--第三章 第二节 IoService接口详情
在MINA中,IoService接口是两个最重要的接口的父接口:IoAcceptorIoConnector要构建一个服务端,你必须选择一个IoAcceptor接口的实现类;而要构建一个客户端,你必须选择一个IoConnector接口的实现类。IoAcceptor基本上来说,该接口的命名是由于accpet()方法,它主要负责在一个客户端和该翻译 2013-09-11 11:25:24 · 919 阅读 · 0 评论 -
MINA2.0用户手册中文版--第三章 第三节 服务端接口IoAcceptor
要构建一个服务端,你必须选择一个IoAcceptor接口的实现类。接口IoAcceptor基本上来说,该接口的命名是由于accpet()方法,它主要负责在一个客户端和该服务之间创建连接。然后,服务才能接受来自这些连接的请求。有时,我们会称之为“服务端”接口。因为我们需要提供处理多种传输协议(TCP/UDP/...),所以我们就提供了多种该接口的实现,我们已经提供了很翻译 2013-09-11 11:28:28 · 973 阅读 · 0 评论 -
Mina实现自定义协议的通信
网络的传输使用需要遵循一定的规则,这些规则我们称为协议。如在互联网请求HTML页面的时候,我们要遵循HTTP协议,HTTP头的格式就是我们要遵守的规则:Request HeadersAccept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Charset:GBK,utf-8;q=0.7,*;转载 2013-08-15 15:58:13 · 1257 阅读 · 0 评论 -
Apache Mina使用小记
apache mina使用小记 简介 Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。 环境为jdk1.6+freebsd9(64bit)+apache-mina-2.0.7+vim 首先是环境变量的配置setenv JAVA_转载 2013-06-15 21:21:19 · 751 阅读 · 0 评论 -
Java NIO系列教程(一) Java NIO 概述
Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。转载 2013-09-05 22:50:59 · 761 阅读 · 0 评论 -
Java NIO系列教程(三) Buffer
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:写入数据到Buffer调用f转载 2013-09-05 23:04:56 · 899 阅读 · 0 评论 -
Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此转载 2013-09-05 23:24:06 · 1310 阅读 · 0 评论 -
MINA2.0用户手册中文版--第二章 第一节 MINA应用程序架构
简介 人们经常会问,基于MINA的应用程序的结构是什么样的呢?我们可以通过这篇文章来看一看。从MINA的简报中我们可以看到如下的一个MINA鸟瞰视图: 从这个图我们可以看到,MINA将你的应用(不管是客户端还是服务端)和基础网络层粘合起来,不管这个网络层是基于TCP、UDP和RS-232C串行通信的,还是基于in-VM通信。 你只需翻译 2013-09-11 10:59:52 · 1078 阅读 · 0 评论 -
MINA2.0用户手册中文版--第三章 第四节 客户端接口IoConnector
要构建一个客户端,你必须选择一个IoConnector接口的实现类。IoConnector就像我们需要在服务器端实现IoAcceptor一样,我们需要在客户端中实现IoConnector。同样,我们提供了很多实现类:NioSocketConnector:非阻塞的基于TCP协议的IoConnector实现NioDatagramConector:非阻塞基于UDP协议的I翻译 2013-09-11 11:29:57 · 908 阅读 · 0 评论 -
Java NIO系列教程(四) Scatter/Gather
Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(ga转载 2013-09-05 23:20:48 · 683 阅读 · 0 评论 -
Java NIO系列教程(六) Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。为什么使用Selector?仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开转载 2013-09-05 23:27:34 · 747 阅读 · 0 评论 -
Java NIO系列教程(七) FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAcc转载 2013-09-05 23:33:55 · 721 阅读 · 0 评论 -
Java NIO系列教程(八) SocketChannel
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:转载 2013-09-05 23:35:10 · 776 阅读 · 0 评论 -
Java NIO系列教程(九) ServerSocketChannel
Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。这里有个例子:01ServerSocketChannel serverSocketChannel = Serv转载 2013-09-05 23:53:41 · 910 阅读 · 0 评论 -
Java NIO系列教程(十) Java NIO DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:1DatagramChannel channel = DatagramChan转载 2013-09-05 23:57:00 · 832 阅读 · 0 评论 -
Java NIO系列教程(十一) Pipe
Java NIO 管道是2个线程之间的单向数据连接。Pipe有一个source通道和一个sink通道。数据会被写到sink通道,从source通道读取。这里是Pipe原理的图示:创建管道通过Pipe.open()方法打开管道。例如:1Pipe pipe = Pipe.open();向管道转载 2013-09-06 00:00:46 · 883 阅读 · 0 评论 -
Java NIO系列教程(十二) Java NIO与IO
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO面向流转载 2013-09-06 00:01:24 · 763 阅读 · 0 评论 -
MINA2.0用户手册中文版--第一章 MINA2.0入门
1. NIO概述 NIO是Java New IO的简称,在JDK1.4版本中引入该API,从那时起,就被广泛的应用。通过使用她,可以通过非阻塞的方式进行IO操作。Java.nio.*包含了如下核心结构:Buffers - 用于基本类型数据的容器Charsets - Unicode代码单元序列和字节序列之间的对应映射关系的容器Channels - 表示I/O翻译 2013-09-11 10:59:17 · 984 阅读 · 0 评论 -
MINA2.0用户手册中文版--第二章 第五节 UDP客户端实例
这一节我们将看一下上一节中提到的UDP服务器的客户端代码:实现一个客户端需要做如下:创建一个Socket并连接到服务器设置操作处理器IoHandler收集可用内存发送数据到服务器我们来看下包org.apache.mina.example.udp.client中的代码MemMonClient.java,前面几行代码很简洁:connector = new NioDa翻译 2013-09-11 11:07:54 · 878 阅读 · 0 评论 -
MINA2.0用户手册中文版--第二章 第二节 TCP服务端实例
本教程将引导创建一个基于MINA的程序实例,例子是一个时间服务器,需要以下先决条件:MINA 2.x CoreJDK 1.5 或 更高版本SLF4J 1.3.0 或 更高版本Log4J 1.2用户: slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.xLog4J 1.3用户 : slf4j-api.jar, slf4j-log4j翻译 2013-09-11 11:00:49 · 1062 阅读 · 0 评论 -
MINA2.0用户手册中文版--第二章 第四节 UDP服务端实例
这一次,我们将以 org.apache.mina.example.udp包中的代码作为开始,为了保持简单,我们将只关注和MINA相关的部分。要构建一个UDP服务,我们要完成以下两点:1. 创建一个数据报Datagram Socket用来监听传入的客户端请求(参看包中的代码MemoryMonitor.java)2. 创建一个IOHandler用来处理MINA框架生成的事件(参翻译 2013-09-11 11:07:14 · 881 阅读 · 0 评论 -
MINA2.0用户手册中文版--第七章 MINA中的处理程序Handler
处理程序Handler负责处理MINA触发的所有I/O事件,在事件穿越过滤器链之后,IoHandler接口将会接手所有的事件。它提供如下方法:sessionCreatedsessionOpenedsessionClosedsessionIdleexceptionCaughtmessageReceivedmessageSentsessionCreated方法方法session翻译 2013-09-11 11:20:48 · 921 阅读 · 0 评论 -
JAVA NIO 实例
import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;impor转载 2014-09-03 14:05:53 · 543 阅读 · 0 评论