文档库 最新最全的文档下载
当前位置:文档库 › Mina文档

Mina文档

Mina文档
Mina文档

Mina使用

1Mina简介:

Apache MINA(Multipurpose Infrastructure for Network Applications) 是Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的MINA 版本支持基于Java NIO 技术的TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。。本文将通过官方网站上的快速入门程序来介绍MINA 的基础架构的同时演示如何使用MINA 开发网络应用程序。

2环境准备:

首先到官方网站下载最新的MINA 版本,地址是:https://www.wendangku.net/doc/5c2143620.html,/downloads.html。

下载之前先介绍一下MINA 的两个版本:1.0.x 适合运行环境为JDK1.4,1.1.x 适合JDK1.5 的版本,两者的编译环境都需要JDK1.5。JDK1.5 已经是非常普遍了,本文中使用 1.1.5 版本的MINA,编译和运行所需的文件是mina-core-1.1.7.jar。

下载MINA 的依赖包slf4j。MINA 使用此项目作为日志信息的输出,而MINA 本身并不附带此项

目包,请到https://www.wendangku.net/doc/5c2143620.html,/download.html地址下载slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的slf4j-api-1.5.2.jar 和 slf4j-simple-1.5.2.jar 这两个jar 文件。

如果没有这两个文件就会导致启动例子程序的时候报org/slf4j/LoggerFactory 类没找到的错误。

当然要求机器上必须装有 1.5 或者更新版本的JDK。

最好你应该选择一个顺手的Java 开发环境例如Eclipse 或者NetBeans 之类的,可以更方便的

编码和调试。

3MINA 基本类的描述:

3.1 IoService应用程序入口

IoService负责底层通讯接入,IoAcceptor(服务器端)和IoConnector(客户端)是IoService 的扩展接口。

备注:IoAcceptor()可以同时启动多个端口,每个端口可以指定不同的handler 和filter,但是一个服务端只有一个监听器。

3.2 IoAcceptor 相当于网络应用程序中的服务器端

程序见4.1附件。

3.3 IoConnector相当于客户端

示例程序见附件:

3.4 IoSession当前客户端到服务器端的一个连接实例

3.5 IoHandler 业务处理逻辑

该接口有五个实现类ChainedIoHandler, DemuxingIoHandler, IoHandlerAdapter, SingleSessionIoHandlerDelegate, StreamIoHandler。其中ChainedIoHandler, DemuxingIoHandler, StreamIoHandler实现了接口,并继承了IoHandlerAdapter,IoHandlerAdapter实现了接口的所有方法,但是在方法中并没有做什么,我们可以继承它,根据需要有选择的重写其中的方法。

一个IoHandler接口具有如下一些方法:

StreamIoHandler类提供了基于流的I/O支持,继承这个类并实现processStreamIo(IoSession session, InputStream in, OutputStream out)方法来执行I/O操作:

DemuxingIoHandler将接收事件分离到指定的MessageHandler中。

ChainedIoHandler

3.6 IoFilter 过滤器用于悬接通讯层接口与业务层接口。

IoFilter是MINA核心构造之一,扮演非常重要的角色。它过滤所有的I/O事件和请求,这些事件和请求由IoService最终到达IoHandler。

过滤器的生命周期:一个过滤器只有当它处于过滤器链中时才会起过滤作用。

当添加一个过滤器到过滤器链时:

a.ReferenceCountingIoFilter在第一时间调用init()方法。

b.调用onPreAdd方法来告知程序,一个过滤器将被添加到过滤器链中。

c.当过滤器被添加到过滤器链后,所有的事件和I/O请求都会通过过滤器到达

IoHandler。

d.调用onPostAdd方法来告知程序,一个过滤器已被添加到过滤器链中。

e.当onPostAdd方法抛出异常时,过滤器将会从过滤器链中被删除,如果这个

过滤器是整个过滤器链中的最后一个,那么ReferenceCountingIoFilter将会调

用destory()销毁该过滤器。

当从过滤器链中移除过滤器时:

a.调用onPreRemove方法来告知程序,一个过滤器将会从过滤器链中被移除。

b.过滤器从过滤器链中被移除后后,所有的事件和I/O请求都不会通过该过滤器

到达IoHandler。

c.调用onPostRemove方法来告知程序,一个过滤器已经从过滤器链中被移除。

d.当这个过滤器是过滤器链中的最后一个过滤器时,那么

ReferenceCountingIoFilter将会调用destory()销毁该过滤器。

MINA自身带有一些常用的过滤器,例如codec(字符编号)、LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等IoFilterAdapter(过滤器适配器),这个类只实现了IoFilter接口中的方法,但是方法中

并没有做任何事。

BlackListFilter(黑名单过滤器)是IoFileter的一个实现类,作用是将远程客户端添加到

黑名单中后,该客户端就会访问不到服务器。

程序见附件:

LoggingFilter(日志过滤器),将此过滤器加到过滤器链中后就可以实现MINA的日志功

能。程序见附件:

ProtocolCodecFilter(协议编解码过滤器),通过ProtocolCodecFactory,ProtocolEncoder,

或ProtocolDecoder该过滤器可以实现普通的二进制或特殊的协议数据与POJO之间的相互转换。程序见附件:

协议编码器(ProtocolEncoder)将高级的信息对象编码成二进制或特殊的协议数

据。MINA会对位于IoSession写队列中的所有消息调用en code函数,然后编码器会将经过编码处理过的消息放到ByteBuffer中,通过ProtocolEncoderOutput 函数送出,到达过滤器链中的下个过滤器。

协议解码器(ProtocolDecoder)将二进制或特殊协议数据解码成高级的信息对象。

MINA会对读出的数据调用d ecode函数,然后解码器会将经过解码处理过的消息通过ProtocolDecoderOutput函数送出,到达过滤器链中的下个过滤器。

示例程序:

协议编解码工厂(ProtocolCodecFactory)提供编码解码器,可以实现字节与高级

信息之间的相互转换。

消息编码器(MessageEncoder)编码指定类型的消息。

消息解码器(MessageDecoder)解码指定类型的消息

CompressionFilter(数据压缩过滤器)

SSLFilter(SSL过滤器)

ExecutorFilter(线程执行过滤器)

ReferenceCountingIoFilter()具体叫什么名字翻译不上来,该过滤器的作用就是管理

所有的过滤器,在某个过滤器不处于过滤器链中时调用disdroy()方法来销毁该过滤器,

以释放其占用的资源。在某个过滤器被添加到过滤器链时,调用init()方法来初始化该过滤器,为其分配资源。

StreamWriteFilter(输入流过滤器)使用此过滤器后可以通过IoSession.write(Object)

直接向远程写InputStream。当一个输入流写入到session中后这个过滤器会从这个输入流中读取字节,放到ByteBuffer中,然后将这个ByteBuffer写入到下个过滤器中。当输入流被读完后,过滤器会调用NextFilter#messageSent(IoSession, Object)将原始的输入流写入到session,然后通过原始的IoFilter.WriteRequest通知WriteFuture。这个过滤器会忽略那些不是输入流的信息,这样的信息会直接被转送到下个过滤器。

应当注意的是这个过滤器不负责关闭输入流,我们应当在IoHandler.messageSent()的回调函数中关闭它。

程序见附件:

3.7 IoServiceListener监听器

IoServiceListener监听器的作用是监听其对应的IoService(IoAcceptor和IoConnector)中的事件。

IoFutureListener监听器的作用是用来监听指定的IoFuture.

两个监听器示例程序:

4MINA开发的一般步骤

4.1服务器端:

4.1.1创建接收器(IoAcceptor)

IoAcceptor acceptor = new SocketAcceptor();//建立基于socket通信的client接收器。

4.1.2Server的属性设置

SocketAcceptorConfig cfg = new SocketAcceptorConfig();

cfg.setReuseAddress(true);

// 启用SO_REUSEADDR 套接字选项(作用:允许不同server socket可以监听同一

个端口)

cfg.getFilterChain().addLast("codec",

new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );

//获取过滤器链,并将指定的过滤器添加到过滤器链的最后位置。

cfg.getFilterChain().addLast( "logger", new LoggingFilter() );

//获取过滤器链,并将日志过滤器添加到过滤器链的最后位置。

4.1.3绑定地址(address)和业务处理器(handler)到server。

acceptor.bind(new InetSocketAddress( SERVER_PORT ),

new ServerSessionHandler( ), cfg );

// 绑定address和handler, SERVER_PORT为端口号。

具体程序见附件:

4.2客户端

4.2.1创建连接器(IoConnector)

SocketConnector connector=new SocketConnector();//创建一个基于Socket通信的链接器4.2.2客户端属性设置

//创建连接器设置

SocketConnectorConfig cfg=new SocketConnectorConfig();

//设置连接超时时间

cfg.setConnectTimeout(CONNECT_TIMEOUT);

//添加过滤器链

cfg.getFilterChain().addLast("myChin", new ProtocolCodecFilter(new

TextLineCodecFactory()));

4.2.3绑定地址(address)和业务处理器(handler)到客户端

//建立链接

connector.connect(new InetSocketAddress(HOSTNAME,PORT),new

MinaClientSessionHandler(),cfg);

4.3编写业务处理类

在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。

为了简化Handler 类,MINA提供了IoHandlerAdapter 类,此类仅仅是实现了

我们可以使用

指定的MessageHandler

MyMessage.java

我们可以使用ChainedIoHandler

器,作用是可以定义多个处理器,然后按一定的顺序处理

FirstCommand.java

SecondCommand.java

SingleSessionIoHandlerFactoryImp.java

NewSingleSessionIoHandlerAdapter.java

5MINA 的基础架构

在图中的模块链中,IoService 便是应用程序的入口,IoAccepter 便是IoService 的一个扩展接口。IoService 接口可以用来添加多个IoFilter,这些IoFilter 符合责任链模式并由IoProcessor 线

程负责调用。而IoAccepter 在ioService 接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。在上面的例子中,我们是这样使用IoAccepter 的:

相当于我们使用了Socket 通讯方式作为服务的接入,当前版本的MINA 还提供了除SocketAccepter 外的基于数据报文通讯的DatagramAccepter 以及基于管道通讯的VmPipeAccepter。另外还包括串口通讯接入方式,目前基于串口通讯的接入方式已经在最新测试版的MINA 中提供。你也可以自行实现IoService 接口来使用自己的通讯方式。

而在上图中最右端也就是IoHandler,这便是业务处理模块。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写Handler 类就是使用MINA 开发网络应用程序的重心所在,相当于MINA 已经帮你处理了所有的通讯方面的细节问题。为了简化Handler 类,MINA 提供了IoHandlerAdapter 类,此类仅仅是实现了IoHandler 接口,但并不做任何处理。

前面我们提到IoService 是负责底层通讯接入,而IoHandler 是负责业务处理的。那么MINA 架构图中的IoFilter 作何用途呢?答案是你想作何用途都可以。但是有一个用途却是必须的,那就是作为IoService 和IoHandler 之间的桥梁。IoHandler 接口中最重要的一个方法是messageReceived,这个方法的第二个参数是一个Object 型的消息,总所周知,Object 是所有Java 对象的基础,那到底谁来决定这个消息到底是什么类型呢?答案也就在这个IoFilter 中。在前面使用的例子中,我们添加了一个IoFilter 是 new ProtocolCodecFilter(new TextLineCodecFactory()),这个过滤器的作用是将来自客户端输入的信息转换成一行行的文本后传递给IoHandler,因此我们可以在messageReceived 中直接将msg 对象强制转换成String 对象。

而如果我们不提供任何过滤器的话,那么在messageReceived 方法中的第二个参数类型就是一个byte 的缓冲区,对应的类是https://www.wendangku.net/doc/5c2143620.html,mon.ByteBuffer。虽然你也可以将解析客户端信息放在IoHandler 中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得IoHandler 不只是业务处理,还得充当协议解析的任务。

MINA自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。

Java程序员必须了解的20个lib库

Java程序员必须了解的20个lib库 一般一个经验丰富的开发者,一般都喜欢使用开源的第三方api库来进行开发,毕竟这样能够提高开发效率,并且能够简单快速的集成到项目中去,而不用花更多的时间去在重复造一些无用的轮子,多了解一些第三方库可以提高我们的开发效率,下面就来看一下在开发过程中经常会用到的一些开发第三方库,也可能不是太全,就列举一些常见或者常用的吧。 1,日志库 日志库是最常用的,毕竟在开发项目的过程中都需要使用日志来记录项目的运行信息,从而很快的定位项目的发生的问题。尽管JDK附带了自己的日志库,但是还有更好的选择,例如Log4j、SLF4j和LogBack。一般建议使用SLF4j。比如Alibaba开发手册上也是这样说的,毕竟SLF4J使您的代码独立于任何特定的日志API,就是在项目的其它框架中使用了其它的日志框架库也能够很好的集成。 2,JSON转换库 在当今的web服务、手机api接口开发和物联网世界中,JSON已经成为将信息从客户端传送到服务器的首选协议。它们前端要学好必须每天坚持学习。为了方便大家的交流学习,也是创建了一个群每天都有分享学习方法和专业老师直播

前端课程,这个扣裙首先是132 中间是667 最后是127 前端学习零基础想要学习的同学欢迎加入,如果只是凑热闹就不要来了!!!已经取代了XML,成为以独立于平台的方式传输信息的首选方式。不幸的是,JDK没有JSON库。但是,有许多优秀的第三方库允许您解析和创建JSON消息,比如Jackson和Gson,FastJson。 3,单元测试库库 单元测试是区分普通开发人员和优秀开发人员的最重要的东西。程序员经常被给予不写单元测试的借口,但是最常见的避免单元测试的借口是缺乏流行的单元测试库的经验和知识,包括JUnit、Mockito和PowerMock。 4,通用类库 Java开发人员可以使用一些优秀的通用第三方库,比如Apache Commons和谷歌Guava。我总是在我的项目中包含这些库,因为它们简化了许多任务。正如约书亚?布洛赫(Joshua Bloch)在《Effective Java》一书中正确指出的那样,重新发明轮子是没有意义的。我们应该使用经过测试的库,而不是时不时地编写我们自己的程序。对于开发人员来说,熟悉Apache Commons和谷歌Guava 是很有用的。 5,HTTP库

世界港口中英文及缩写对照

世界港口中英文及缩写对照 Aarhus 45 丹麦DKAAR 阿路斯 Abidjan 225 科特迪瓦CIABJ 阿必尚 Abu Dhabi 971 阿拉伯联合大公国AEAUH 阿布答比Acajutla 503 萨尔瓦多SVAQJ 阿卡加地 Acapulco 52 墨西哥MXACA 阿加普可 Adelaide 61 澳洲AUADL 阿得雷德 Aden 967 也门YEADE 亚丁 Alexandria 20 埃及EGALY 亚历山大 Algiers 213 阿尔及利亚DZALG 阿尔及耳 Alicante 34 西班牙ESALC 亚利坎培 Amsterdam 31 荷兰NLAMS 阿姆斯特丹 An Ping 886 台湾TWANP 安平港 Ancona 39 意大利ITAOI 安科那 Antofagasta 56 智利CLANF 安多法加斯大Antwerp 32 比利时BEANR 安特卫普 Apapa 奈及利亚NGAPP Apia 萨摩亚WSAPW 阿比亚 Aqaba 962 约旦JOAQJ 阿卡巴 Arica 56 智利CLARI 阿立卡 Aruba Is. 297 荷属安地列斯ANAUA 阿鲁巴Ashdod 972 以色列ILASH 亚实突 Assab 251 依索比亚ETASA 阿沙布 Asuncion 595 巴拉圭PYASU 亚松森 Athens 30 希腊GRATH 雅典 Atlanta 1 美国USATL 亚特兰大 Auckland 64 纽西兰NZAKL 奥克兰 Bahrain 973 巴林BHBAH 巴林 Balbo 507 巴拿马PABLB 巴波亚 Baltimore 1 美国USBAL 巴的摩尔 Bandar abbas 98 伊朗IRBND 阿巴市 Bangkok 66 泰国THBKK 曼谷 Banjul 220 甘比亚GMBJL 班久尔 Barcelona 34 西班牙ESBCN 巴塞罗那Barranquilla 57 哥伦比亚COBAQ 巴兰圭拉 Basle (basel) 41 瑞士CHBSL 巴萨尔 Basuo 86 中国大陆CNBSP 八所港 Beihai 86 中国大陆CNBEH 北海 Beira 莫桑比克MZBEW 贝伊拉 Beiruit 961 黎巴嫩LBBEY 贝鲁特 Belawan 62 印度尼西亚IDBLW 棉兰 Belfast 44 英国GBBEL 伯尔发斯特

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

《台大中文学报》撰稿格式

《臺大中文學報》撰稿格式 壹、中文部分 一、各章節使用符號,依一(一),1(1)……等順序表示。 二、請用新式標點,惟書名號用《》,篇名號用〈〉,書名和篇名連用時,省略篇名號, 如《莊子?天下篇》。 三、獨立引文,每行低三格。 四、注釋號碼請用阿拉伯數字標示,如①②③……。 五、文後不另列引用書目或參考書目為原則。 注釋之體例,請依下列格式撰寫: (一)引用專書: 王夢鷗:《禮記校證》(臺北:藝文印書館,1976年12月),頁102。 (二)引用論文: 1.期刊論文: 徐信義:〈張炎的詞學批評〉,《幼獅學誌》第14期(1977年2月),頁172-194。 2.論文集論文: 余英時:〈清代思想史的一個新解釋〉,《歷史與思想》(臺北:聯經出版事業公司,1976年9月),頁121-156。 3.學位論文: 孔仲溫:《類篇研究》(臺北:政治大學中國文學研究所博士論文,ooo先生指導,1985年),頁466。 (三)引用古籍: 1.古籍原刻本: 宋?司馬光:《資治通鑑》(南宋鄂州覆北宋刊龍爪本,約西元12世紀),卷2,頁 2上。 2.古籍影印本: 明?郝敬:《尚書辨解》(臺北:藝文印書館,1969年,百部叢書集成影印湖北叢書 本),卷3,頁2上。 (四)引用報紙: 丁邦新:〈國內漢學研究的方向和問題〉,《中央日報》第22版(1988年4月2日)。 (五)再次徵引: 1.再次徵引時可用簡單方式處理,如:

①王叔岷:〈論校詩之難〉,《臺大中文學報》第3期(1989年12月),頁1。 ②同前註。 ③同前註,頁3。 2.如果再次徵引的註,不接續,可用下列方式表示: ④同註①,頁5。 貳、外文部分 一、引用專書: Edwin O. James, Prehistoric Religion: A Study in Prehistoric Archaeology(史前宗教:史 前考古學的研究) (London: Thames and Hudson, 1957), p.18. 二、引用論文: 1.期刊 Richard Rudolph, “The Minatory Crossbowman in Early Chinese Tombs,”(中國早期墓葬的強弩使用者) Archives of the Chinese Art Society of America, 19(1965),pp.8-15. 2.論文集 E.G. Pulleyblank, “The Chinese and their Neighbors in Prehistoric and Early Historic Times,”(史前與早期歷史的中國人與其四鄰)in David N. Keightley,ed., The Origins of Chinese Civilization (Berkeley:University of California Press,1983),pp.460-463. 3.學位論文 Edwin O. James, Prehistoric Religion:A Study in Prehistoric Archaeology (史前宗教:史前考古學的研究) (Cambridge:Harvard University Ph. D. dissertation ,○○○先生指導,1957年),p.18. 4.學術討論會 Edward L.Shanghnessy, “Historical Perspectives on the In troduction of Chariot into China,”(車子傳入中國的歷史回顧)paper presented to the ?th Conference of the American Historical Association, New York, 1985. 1.見郭沫若:《十批判書》,《民國叢書》(上海:上海書局,1992年12月,重印民國36年上 海群益書局版),4-1冊(41冊?),頁164-166,170-171。 2.見宋?楊時:《龜山集語錄一》(臺北:商務印書館,出版年不詳,四庫全書珍本?集)第992 冊,卷10,頁3上。

Mina2源码分析

Mina2.0框架源码剖析(一) 整个框架最核心的几个包是:org.apache.mina.core.service, org.apache.mina.core.session, org.apache.mina.core.polling以及 org.apache.mina.transport.socket。 这一篇先来看org.apache.mina.core.service。第一个要说的接口是IoService,它是所有IoAcceptor和IoConnector的基接口.对于一个IoService,有哪些信息需要我们关注呢?1)底层的元数据信息TransportMetadata,比如底层的网络服务提供者(NIO,ARP,RXTX等),2)通过这个服务创建一个新会话时,新会话的默认配置IoSessionConfig。3)此服务所管理的所有会话。4)与这个服务相关所产生的事件所对应的监听者(IoServiceListener)。5)处理这个服务所管理的所有连接的处理器(IoHandler)。6)每个会话都有一个过滤器链(IoFilterChain),每个过滤器链通过其对应的IoFilterChainBuilder来负责构建。7)由于此服务管理了一系列会话,因此可以通过广播的方式向所有会话发送消息,返回结果是一个WriteFuture集,后者是一种表示未来预期结果的数据结构。8)服务创建的会话(IoSession)相关的数据通过IoSessionDataStructureFactory来提供。9)发送消息时有一个写缓冲队列。10)服务的闲置状态有三种:读端空闲,写端空闲,双端空闲。11)还提供服务的一些统计信息,比如时间,数据量等。 IoService这个服务是对于服务器端的接受连接和客户端发起连接这两种行为的抽象。 再来从服务器看起,IoAcceptor是IoService 的子接口,它用于绑定到指定的ip和端口,从而接收来自客户端的连接请求,同时会fire相应的客户端连接成功接收/取消/失败等事件给自己的IoHandle去处理。当服务器端的Accpetor从早先绑定的ip和端口上取消绑定时,默认是所有的客户端会话会被关闭,这种情况一般出现在服务器挂掉了,则客户端收到连接关闭的提示。这个接口最重要的两个方法是bind()和unbind(),当这两个方法被调用时,服务端的连接接受线程就启动或关闭了。 再来看一看客户端的连接发起者接口IoConnector,它的功能和IoAcceptor基本对应的,它用于尝试连接到服务器指定的ip和端口,同时会fire相应的客户端连接事件给自己的IoHandle去处理。当connet方法被调用后用于连接服务器端的线程就启动了,而当所有的连接尝试都结束时线程就停止。尝试连接的超时时间可以自行设置。Connect方法返回的结果是ConnectFuture,这和前面说的WriteFuture类似,在后面会有一篇专门讲这个模式的应用。 前面的IoAcceptor和IoConnector就好比是两个负责握手的仆人,而真正代表会话的实际I/O操作的接口是IoProcessor,它对现有的Reactor模式架构的Java NIO框架继续做了一层封装。它的泛型参数指明了它能处理的会话类型。接口中最重要的几个方法,add用于将指定会话加入到此Processor中,让它负责处理与此会话相关的所有I/O操作。由于写操作会有一个写请求队列,flush就用于对指定会话的写请求队列进行强制刷数据。remove方法用于从此Processor中移除和关闭指定会话,

JAVA NIO基础知识总结二_2012-1-9

JA V A NIO基础知识总结二 (一)、回顾一下总结一: (1)、NIO的几个概念: ①、Buffer :内存块,实质就是一个数组。NIO数据读或写得中转地。 ②、Channel:连接设备的通道。用于向buffer提供数据或者读取数据,异步I/O支持。 ③、Selector :channel事件的监听者,他能检测到一个或多个通道,并将事件分发出去 ④、SelectionKey:channel上发生的事件,包含了事件的状态信息和时间以及对应的channel。 (2)、在前面总结一中,最后的时候给出了一个完整的关于NIO操作网络套接字的例子,在这里先总结一下构建基于NIO的服务端的一般步骤:①、构造一个Selector ②、打开一个serverSocketChannel ③、设定serverSocketChannel为非阻塞 ④、绑定socketserverChannel到一个主机地址和端口 ⑤、注册selector并告知感兴趣的事情 (3)、Channel的状态有四种: ①、Connectable:当一个Channel完成socket连接操作已完成或者已失败。

②、Acceptable:当一个Channel已准备好接受一个新的socket连接时,channel是Acceptale ③、Readable:当一个channel能被读时。 ④、Writable:当一个Channel能被写时为可写状态。 (4)、下面是NIO中的关系图,来自于《java编程思想》

(二)、基于多线程的NIO 总结一的例子,是基于单线程的,单线程的好处是简单,不用去考虑过于复杂的线程问题,但是仔细想一下,如果数据在网络传输的过程中发生了阻塞呢,那岂不是要花费很多的时间?再者如果我们要实现像QQ中的聊天室呢,如何实现呢?。为了解决这些问题,我们现在试着采用多线程的,但是采用多线程,会产生很多线程,创建、销毁线程都是要花费时间的,所以这里可以运用到线程池来管理。 下面一个例子是:客户端发来信息,服务端然后转发所有的信息给在线的客户端。import java.io.IOException; import https://www.wendangku.net/doc/5c2143620.html,.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import java.util.logging.Logger; public class RSocketServer implements Runnable { private final static int POOLSIZE = 100;// 处理线程池的大小 private SelectionKey selectionKey; // 选择键 private ExecutorService service = Executors.newFixedThreadPool(POOLSIZE);// 固定大小的线程池 private boolean isRunning = true; private Selector selector;// 选择器 private String writeMsg;// 需要写的信息 private ServerSocketChannel ssc; public RSocketServer() { try { selector = Selector.open(); ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); ssc.socket().bind(new InetSocketAddress(8080)); selectionKey = ssc.register(selector, SelectionKey.OP_ACCEPT); System.out.println("服务器启动成功!正在端口为8080上等待..."); } catch (Exception e) { e.printStackTrace(); } } public void run() { try {

mina 框架学习

mina 框架学习 转帖:https://www.wendangku.net/doc/5c2143620.html,/s/blog_5f9beca40101ee6w.html 1、简介 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。Apache Mina也称为: l NIO框架 l客户端/服务端框架(典型的C/S架构) l 网络套接字(networking socket)类库 2、通信流程 那么让我们来看一下mina在我们应用中处于什么样的一个位置呢 上图可以看出mina位于应用程序和底层网络传输之间,它不关心底层网络数据如何传输,只负责接收底层数据,过滤并转换为Java对象提供给我们的应用程序,然后把应用程序响应值过滤并转换为底层识别的字节,提供给底层传输。 再来看一下mina 通信流程图

可以很清晰看出mina主要有三个主要的业务接口:IoService,IoFilter和IoHandler (1) IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。 (2) IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode 是最为重要的、也是你在使用Mina 时最主要关注的地方。 (3) IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。 总的来说创建一个基于mina框架的应用分为三个模块: 创建连接(IoService))——>添加消息过滤器(IoFilter)——>添加业务处理(IoHandler) 3、server 和client mina中server和client没有多大区别都是通过Ioservice建立连接和通信的,来看下具体流程 Server 一般地,服务端会有一个端口来监听client的请求/packet,并且为每隔connect建立一个session(无论是基于TCP/IP协议还是UDP协议),Server端主要通过IoAccptor建立连接

MINA网络通信框架

MINA网络通信框架 Posted by kunshuo on 2012-04-11Leave a comment (1)Go to comments MINA网络通信框架 基本介绍: Apache MINA 2是一个开发高性能和高可伸缩性网络应用程序的网络应用框架。它提供了一个抽象的事件驱动的异步API,可以使用TCP/IP、UDP/IP、串口和虚拟机内部的管道等传输方式。Apache MINA 2可以作为开发网络应用程序的一个良好基础。 Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、 接收的数据以及你的业务逻辑即可。 mina的基本架构: 在图中的模块链中,IoService 便是应用程序的入口,相当于我们前面代码中的IoAccepter,IoAccepter 便是IoService 的一个扩展接口。

IoService 接口可以用来添加多个IoFilter,这些IoFilter 符合责任链模式并由IoProcessor 线程负责调用。而IoAccepter 在ioService 接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。ioHandler则为应用逻辑处理类。 主要类以及接口: (1.)IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监 听是否有连接被建立。 (2.)IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是 说它也拥有自己的Selector,这是与我们使用JAVA NIO编码时的一个不同之处, 通常在JAVA NIO编码中,我们都是使用一个Selector,也就是不区分IoService 与IoProcessor两个功能接口。另外,IoProcessor负责调用注册在IoService上 的过滤器,并在过滤器链之后调用IoHandler。 (3.)IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、 数据的编码(write方向)与解码(read方向)等功能,其中数据的encode 与decode 是最为重要的、也是你在使用Mina时最主要关注的地方。

网络编程框架

网络编程框架 Socket编程接口 NIO编程接口 Leader Follower 原理SEDA原理 Netty编程框架 Mina编程框架 Web编程框架 分布式应用 ?负载均衡器/Load Balancer Session Stickiness ?内存状态复制/Replication Sysch-replication Asych-replication ?Local Cache

ConcurrentHashMap FastMap Local Queue Queues Queues类似于沟通“生产者”和“消费者”的管道。组件从管道的一端放入,然后从另一端取出:“先进先出”(FIFO)的顺序。Queue接口在JavaSE5新添加到java.util中的,能够被用于单线程访问的场景中,主要适用于多个生产者、一个或多个消费者的情景,所有的读写操作都是基于同一个队列。 java.util.concurrent包中的BlockingQueue接口是Queue的子接口,而且还添加了新的特性处理如下场景:队列满(此时刚好有一个生产者要加入一个新的组件)、队列空(此时刚好有一个消费者读取或者删除一个组件)。BlockingQueue提供如下方案解决这些情况:一直阻塞等待直到其他线程修改队列的数据状态;阻塞一段时间之后返回,如果在这段时间内有其他线程修改队列数据,那么也会返回。

Deque 在JavaSE6中新增加了两端都可以添加和删除的队列-Deque (发音 "deck",not "dick"). Deques不仅可以从一端添加元素,从另一端移除,而且两端都可以添加和删除元素。如同BlockingQueue,BlockingDeque接口也为阻塞等待和超时等待的特殊情况提供了解决方法。因为Deque继承Queue、BlockingDeque继 Deque的一个特殊应用场景是只在一个端口进行添加、删除、检查操作--堆栈(first-in-last-out顺序)。Deque接口提供了stack相同的方法:push(), pop()和peek(),这方法和addFirst(), removeFirst(), peekFirst()一一对应,可以把Deque的任何一个实现类当做堆栈使用。表6中是JDK中Deque和BlockingDeque的实现。注意Deque继承Queue,BlockingDeque继承自BlockingQueue。 分布式缓存 Coherence Jboss Cache Mem Cache 分布式数据存储 数据库的垂直划分和水平划分

关于Apache Mina

关于Apache Mina 一、介绍 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理底层I/O和线程并发等复杂工作,开发人员能够把更多的精力投入到业务设计和开发当中。MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。 MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。 二、调用过程 在图中的模块链中,IoService 便是应用程序的入口,相当于代码中的 IoAccepter,IoAccepter 便是 IoService 的一个扩展接口。IoService 接口可以用来添加多个 IoFilter,这些 IoFilter 符合责任链模式并由 IoProcessor 线程负责调用。而 IoAccepter 在 ioService 接口的基础上还提供绑定某个通讯端口以及取消绑定的接口。 在上图中最右端也就是 IoHandler,这便是业务处理模块。在业务处理类中不需要去关心实际的通讯细节,只管处理客户端传输过来的信息即可。编写 Handler 类就是使用 MINA 开发网络应用程序的重心所在,相当于 MINA 已经帮你处理了所有的通讯方面的细节问题。为了简化 Handler 类,MINA 提供了 IoHandlerAdapter 类,此类仅仅是实现了 IoHandler 接口,但并不做任何处理。 IoHandler 接口中具有如下一些方法: Java代码 1.public interface IoHandler { 2. void sessionCreated(IoSession session) throws Exception;//会话创建 3. void sessionOpened(IoSession session) throws Exception;//打开会话,与 sessionCreated最大的区别是它是从另一个线程处调用的 4. void sessionClosed(IoSession session) throws Exception;//会话结束,当连接 关闭时被调用 5. void sessionIdle (IoSession session, IdleStatus status) throws Except ion;//会话空闲 6. void exceptionCaught(IoSession session, Throwable cause) throws Exceptio n;//异常捕获,Mina会自动关闭此连接

杂志广告推广方案

2011“迪亚兹”静脉曲张袜—《米娜时尚国际中文版》杂志 广告推广方案 一、产品背景介绍 1、产品名称 迪亚兹瘦腿袜 2、产生背景 塑形美腿袜因安全、可靠、有效,依靠口碑传播得以在爱美女性间广泛宣传。而蔡依林和小S在电视节目中,对静脉曲张袜产品的赞许也更加加大了产品的普及。 3、产品简介 迪亚兹瘦腿袜,主要是靠特殊压强部位的“压力”来达到首推的效果,所以对多肌肉型MM 来说,效果会减弱,但瘦腿袜可以很好的缓解肌肉酸痛、浮肿等症状,所以对于保健功效肌肉和肥肉型MM都是一样的,对于肥胖型的MM几乎是穿上即可看到效果,真正的瘦腿的时候看个人情况而定。 4、产品类型 连裤袜、九分裤、袜子、丝袜、睡眠袜 5、目标消费者 1、长时间站立(收银员、教室、医生、护士、交警、服务员) 2、长时间静坐(IT人士、白领) 3、经常出差,坐飞机(空姐、乘务员) 二、媒介选择分析 《米娜时尚国际中文版》杂志系由日本著名出版业者主妇之友出版社独家授权在中国大陆地区发行的全新形态女性休闲时尚杂志,也是一本“专注于自己的流行”的时尚杂志。她致力于推荐从日本原宿街头兴起的“混搭”休闲服饰风格,这股潮流风格,不仅影响了近几年的日本、也给台湾和香港的年轻人诠释了一种全新的时尚概念。 1、创刊影响 《米娜时尚国际中文版》杂志系由日本著名出版业者主妇之友出版社独家授权在中国大陆地区发行的全新形态女性休闲时尚杂志,也是一本“专注于自己的流行”的时尚杂志。她致力于推荐从日本原宿街头兴起的“混搭”休闲服饰风格,这股潮流风格,不仅影响了近几年的日本、也给台湾和香港的年轻人诠释了一种全新的时尚概念。今天,她的面世,也将为中国的时尚青年带来一股清新之风。米娜就像这样一个女孩:年轻不造作,柔美不浓艳;时尚但很个性;时髦却不盲从;注重细节;充满梦想,热爱都市生活,是因为可爱而美丽的人气女性。“米娜时尚”的出现为混搭风提供了很好的诠释平台,在充斥着针对都市白领女性上班着装指导的女性杂志市场上,米娜时尚国际中文版的出现对于中国都市女性来说,不只是在欧美时尚杂志之外多了一种选择而已,而是更能贴近亚洲女性对Fashion的实际需求。传统的时髦的形象仅仅取决于如何“穿”,但是“混搭”的概念将让流行变得更为个性与自信,她的诀窍就是由简单的单品作为时髦的元素,用最简单的几项成就出时髦的风格。多层次的穿搭展现年轻化的流行感,细肩带上衣加背心、牛仔裤套短裙等只要是穿”与“搭”的

MINA框架新人指南

支付宝(中国)网络技术有限公司 蓝秋鹏(仲景)

目录 1.前言 (3) 2.实践 (4) 2.1.服务端演示 (4) 2.2.客户端演示 (6) 3.进阶 (8)

在资金线混有两个技术框架是一定要懂得如何使用的,它们就是MINA和HTTPCLIENT(还没听过的,就先百度一下)。支付宝和银行前置机之间的通讯基本都是使用者两种框架,即使你不懂SOCKET或者HTTP很底层的协议也没多大关系。 对于HTTPCLIENT有过很多实践了,从我刚进支付宝的第一个项目个人诚信通,到最近的建行境外收单直连改造,都是使用HTTP通讯。 突然间要做建行银行卡代扣,需要使用SOCKET跟建行通讯,对SOCKET 一点都不懂,只是听大禹和香石说使用MINA很简单,闭关修炼了两天确实很简单,哈哈。先找到MINA的主页,肯定有很多资料可以学习的,然后再编写DEMO,跑起来,改改DEMO,添加一些个性化的功能,两天时间基本上就算入门啦,可以开始进入项目编码啦。这些时间对于开发工程师来说,就是项目的技术准备阶段,在BRD或者PRD阶段投入的资源,让开发人员在开发阶段不再担心技术问题,可以快速编码,甚至提前完成开发任务。 跟MINA类似的框架,还有著名的Jboss Netty,代码框架非常类似,使用方法也大同小异,可以说Jboss Netty是MINA的改良版,但是目前我们系统还没有Jboss Netty的实际应用,不考虑引入到实际项目中。 本文档作为MINA框架的入门手册,浅显易懂,没有高级应用,比如配置线程模型,就可以满足日常开发。

跟银行的通讯,首先我们要定位自己的角色,我们扮演的是客户端,还是服务端,大部分场景我们都是扮演客户端的角色,如果银行有通知接口,在业务做完时银行会主动通知我们,推进我们的业务,这时我们就是服务端。 2.1.服务端演示 通过DEMO实现一个简单的服务端,MINA框架已经做了很好的封装,我们只需要编写几行代码,通过main启动MinaServer,监听端口1314: SOCKET接口是TCP/IP网络的API,不说这些很抽象的概念,我们可以直接使用MINA封装的SocketAcceptor 。 main方法中定义了整型的端口1314,在实际应用中一般通过antx.properties配置端口,这样就可以把配置的权限交给运维部门。 每一个信息都会通过在IoAcceptor中定义的过滤器链的所有过滤器,完成个性化的日志记录和解码工作。日志过滤器用SL4J库记录信息,而编码过滤器则解码所有收到的信息. 这个简单的例子,我们使用 new TextLineCodecFactory() 发送的信息进行编码,这是MINA自带的,功能有限,只能处理文本或者String类型。 还有一个参数new ServerHandler(),传的是实现IoHandler接口的类,对客户端的请求要进行什么业务处理,都在这里实现。

Java 远程通讯_MINA

第一章MINA前述 1.1线程模型 MINA线程模型采用了Reactors in threads模型,即Main Reactor + Sub Reactors的模式。由main reactor处理连接相关的任务:accept、connect等,当连接处理完毕并建立一个socket连接(称之为session)后,给每个session分配一个sub reactor,之后该session的所有IO、业务逻辑处理均交给了该sub reactor。每个reactor均是一个线程,sub reactor中只靠内核调度,没有任何通信且互不打扰。 现在来讲讲我对线程模型演进的一些理解: Thread per Connection:在没有nio之前,这是传统的java网络编程方案所采用的线程模型。即有一个主循环,socket.accept阻塞等待,当建立连接后,创建新的线程/从线程池中取一个,把该socket连接交由新线程全权处理。这种方案优缺点都很明显,优点即实现简单,缺点则是方案的伸缩性受到线程数的限制。 Reactor in Single Thread:有了nio后,可以采用IO多路复用机制了。我们抽取出一个单线程版的reactor模型,时序图见下文,该方案只有一个线程,所有的socket连接均注册在了该reactor上,由一个线程全权负责所有的任务。它实现简单,且不受线程数的限制。这种方案受限于使用场景,仅适合于IO密集的应用,不太适合CPU密集的应用,且适合于CPU资源紧张的应用上。 Reactor + Thread Pool:方案2由于受限于使用场景,但为了可以更充分的使用CPU资源,抽取出一个逻辑处理线程池。reactor仅负责IO任务,线程池负责所有其它逻辑的处理。虽然该方案可以充分利用CPU资源,但是这个方案多了进出thread pool的两次上下文切换。

MINA 框架简介

MINA 框架简介 2011-02-12 9:35 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。Mina 主要有1.x 和2.x 两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina 1.x,那么可能会有一些功能并不适用。学习本文档,需要你已掌握JAVA IO、JAVA NIO、JAVASocket、JAVA 线程及并发库(java.util.concurrent.*)的知识。Mina 同时提供了网络通信的Server 端、Client 端的封装,无论是哪端,Mina 在整个网通通信结构中都处于如下的位置: 1。MINA 框架简介 当客户首次访问采用MINA编写的程序时,IoAcceptor作为线程运行,负责接受来自客户的请求。当有客户请求连接时,创建一个 Session,该Session与IoProcessor、SocketChannel以及IOService联系起来。IoProcessor也作为另外一个线程运行,定时检查客户是否有数据到来,并对客户请求进行处理,依次调用在IOService注册的各个IoFilter,最后调用 IoHandler进行最终的逻辑处理,再将处理后的结果Filter后返回给客户端。 2。IoSession Session可以理解为服务器与客户端的特定连接,该连接由服务器地址、端口以及客户端地址、端口来决定。客户端发起请求时,指定服务器地址和端口,客户端也会指定或者根据网络路由信息自动指定一个地址、自动分配一个端口。这个地址、端口对构成一个Session。 Session是服务器端对这种连接的抽象,MINA对其进行了封装,定义了IoSession 接口,用来代表客户端与服务器的连接,在服务器端来指代客户端,实现对客户端的操作、绑定与客户端有关的信息与对象。通过利用Session的这个概念,编写程序时就可以在服务器端非常方便地区分出是当前处理的是哪个客户端的请求、维持客户端的状态信息、可以实现客户端之间相互通讯。 IoSession提供以下一些常用方法: (1)setAttribute(Object key, Object value) getAttribute(Object key)

《GreenEggsAndHam》中文翻译

G r e e n E g g s A n d H a m IamSam我是山姆 SamIam山姆是我 ThatSam-I-am ThatSam-I-am那个“山姆是我” Idon’tlikeThatSam-I-am我不喜欢那个“山姆是我” Doyoulikegreeneggsandham?你喜欢绿鸡蛋和火腿吗? Idonotlikethem,Sam-I-am.?我不喜欢,山姆是我。 Idonotlikegreeneggsandham.我不喜欢绿鸡蛋和火腿。Wouldyoulikethemhereorthere? 你想在这儿还是那儿吃绿鸡蛋和火腿? Iwouldnotlikethemhereorthere.我不想在这儿吃,也不想在那儿吃Iwouldnotlikethemanywhere.我在哪儿都不想吃绿鸡蛋和火腿Idonotlikegreeneggsandham我不喜欢吃绿鸡蛋和火腿 Idonotlikethem,Sam-I-am我不喜欢他们,山姆是我。Wouldyouliketheminahouse?你想在房子里吃吗? Wouldyoulikethemwithamouse?你想和老鼠一起吃吗?

Idonotliketheminahouse我不想在房子里吃Idonotlikethemwithamouse也不想和老鼠一起吃Idonotlikethemhereorthere我既不想在这里吃,也不想在那里吃Idonotlikethemanywhere我在哪儿都不想吃绿鸡蛋和火腿Idonotlikegreeneggsandham我不喜欢吃绿鸡蛋和火腿Idonotlikethem,Sam-I-am我不喜欢他们,山姆是我Wouldyoueattheminabox?你想在盒子里吃吗?Wouldyoueatthemwithafox?你想和狐狸一起吃吗?Notinabox.Notwithafox.我不想盒子里吃.不和狐狸一起吃. Notinahouse.Notwithamouse.不在房子里吃.不和老鼠一起吃。Iwouldnoteatthemhereorthere我既不想在这里吃,也不想在那里吃Iwouldnoteatthemanywhere我在哪儿都不想吃Iwouldnoteatgreeneggsandham我不想吃绿鸡蛋和火腿Idonotlikethem,Sam-I-am我不喜欢它们,山姆是我Wouldyou?Couldyou?Inacar? 那你愿不愿意,要不要在车里吃? Eatthem!Eatthem!吃呀!吃呀!

AMS285-1.2BL中文资料

Advanced AMS285-1.2/AMS385-1.2 Monolithic MICROPOWER VOLTAGE REFERENCE DIODE Systems FEATURES APPLICATIONS ?±4 mV (±0.3%) max. initial tolerance (A grade)? Battery Powered Systems ? Operating Current 10μA to 20mA? Instrumentation ? Low Voltage Reference 1.235? A/D, D/A Converters ? Max. 0.6? Dynamic Impedance (A grade)? Temperature measurement ? Low Temperature Coefficient? Current sources ? 2.5V Device and Adjustable Device also available? Notebook/Personal Computer AMS285-2.5 and AMS285 series, respectively? Monitors/ VCR/ TV AMS385-2.5 and AMS385 series.? Pagers GENERAL DESCRIPTION The AMS285-1.2/AMS385-1.2 are two-terminal micropower band-gap voltage reference diodes. They feature a very low dynamic impedance and good temperature coefficient, operating over a 10μA to 20mA current range. On-chip trimming is used to provide tight voltage tolerance. Since the AMS285-1.2/AMS385-1.2 is a band-gap reference, uses only transistors and resistors, low noise and good long-term stability result. Careful design of the AMS285-1.2/AMS385-1.2 has made the device exceptionally tolerant of capacitive loading, making it easy to use in almost any reference application. The wide dynamic operating range allows its use with widely varying supplies with excellent regulation. The extremely low power drain of the AMS285-1.2/AMS385-1.2 makes these reference diodes useful for micropower circuitry. These voltage references can be used to make portable meters, regulators or general purpose analog circuitry with battery life approaching shelf life. Further more, the wide operating current allows it to replace older references with a tight tolerance part. The AMS285-1.2 is operational in the full industrial temperature range of -40°C to 85°C while AMS385-1.2 is operating over a 0°C to 70°C temperature range. The AMS285-1.2/AMS385-1.2 are available in TO-92, SO-8 and SOT-89 packages. ORDERING INFORMATION: TOL.PACKAGE TYPE OPERATING TO-928 LEAD SOIC SOT-89TEMPERATURE RANGE ±4mV AMS285-1.2AN AMS285-1.2AS AMS285-1.2AL-40 to 85° C ±12mV AMS285-1.2BN AMS285-1.2BS AMS285-1.2BL-40 to 85° C ±25mV AMS285-1.2CN AMS285-1.2CS AMS285-1.2CL-40 to 85° C ±4mV AMS385-1.2AN AMS385-1.2AS AMS385-1.2AL 0 to 70° C ±12mV AMS385-1.2BN AMS385-1.2BS AMS385-1.2BL 0 to 70° C ±25mV AMS385-1.2CN AMS385-1.2CS AMS385-1.2CL 0 to 70° C

相关文档