易截截图软件、单文件、免安装、纯绿色、仅160KB

Java NIO类库Selector机制解析(上)

 
Java NIO类库Selector机制解析(上)
 
赵锟   陈皓
http://blog.csdn.net/haoel
 
一、  前言
 
自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但引入了全新的高效的I/O机制,同时,也引入了多路复用的异步模式。NIO的包中主要包含了这样几种抽象数据类型:
 
Buffer:包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。
Charset:它提供Unicode字符串影射到字节序列以及逆映射的操作。
Channels:包含socket,file和pipe三种管道,都是全双工的通道。
Selector:多个异步I/O操作集中到一个或多个线程中(可以被看成是Unix中select()函数的面向对象版本)。
 
我的大学同学赵锟在使用NIO类库书写相关网络程序的时候,发现了一些Java异常RuntimeException,异常的报错信息让他开始了对NIO的Selector进行了一些调查。当赵锟对我共享了Selector的一些底层机制的猜想和调查时候,我们觉得这是一件很有意思的事情,于是在伙同赵锟进行过一系列的调查后,我俩发现了很多有趣的事情,于是导致了这篇文章的产生。这也是为什么本文的作者署名为我们两人的原因。
 
先要说明的一点是,赵锟和我本质上都是出身于Unix/Linux/C/C++的开发人员,对于Java,这并不是我们的长处,这篇文章本质上出于对Java的Selector的好奇,因为从表面上来看Selector似乎做到了一些让我们这些C/C++出身的人比较惊奇的事情。
 
下面让我来为你讲述一下这段故事。
 
二、  故事开始 : 让C++程序员写Java程序!
 
没有严重内存问题,大量丰富的SDK类库,超容易的跨平台,除了在性能上有些微辞,C++出身的程序员从来都不会觉得Java是一件很困难的事情。当然,对于长期习惯于使用操作系统API(系统调用System Call)的C/C++程序来说,面对Java中的比较“另类”地操作系统资源的方法可能会略感困惑,但万变不离其宗,只需要对面向对象的设计模式有一定的了解,用不了多长时间,Java的SDK类库也能玩得随心所欲。
 
在使用Java进行相关网络程序的的设计时,出身C/C++的人,首先想到的框架就是多路复用,想到多路复用,Unix/Linux下马上就能让从想到select, poll, epoll系统调用。于是,在看到Java的NIO中的Selector类时必然会倍感亲切。稍加查阅一下SDK手册以及相关例程,不一会儿,一个多路复用的框架便呈现


相关文档:

JAVA计算机代码

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class j5_13 extends Applet implements ActionListener
{
  Panel p=new Panel();//新建布局
  Label welcome,la1,li1,la2,li2,lresult;//提示标签,符号标签以及计算结果的标签
  TextField ta,tb,t ......

Java ArrayList使用总结(一)

   最近一直在使用Java,感觉它的越界检查非常有效。这一点对于初学者来说是非常重要的(提高程序的严谨性),对于有经验的程序员来说也很有帮助。Java中有一个很有效的ArrayList类(读者可以结合Java API
来学习它),。它和一般的数组不一样,不需要提前分配固定的空间(使用比较灵活),每次使用的时候可以添加 ......

Java的AWT

AWT是Java中支持图形化用户界面GUI设计的一个工具集。AWT的API是独立于平台的,但设计出来的界面在各种平台的风格不同,利用API中各种类在特定平台下的对等组件peers提供具体平台下的实现。
欲建立一个GUI首先确定所用的组件及其布局,然后实现其事件的响应。组件的类型有多种,如常用的Button、CheckBox等,均为Component ......

四个有害的Java编码习惯

程序中的编码风格让我们的编程工作变得轻松,特别是程序维护员,他们要经常阅读其他人编写的程序编码,这一点尤其突出。编码规范从根本上解决了程序维护员的难题;规范的编码阅读和理解起来更容易,也可以快速的不费力气的借鉴别人的编码。对将来维护你编码的人来说,你的编码越优化,他们就越喜欢你的编码,理解起来也就越 ......

java中String类的构造函数

String类中的构造函数
String(); 构造一个空字符串对象
String(byte[] bytes); 通过byte数组构造字符串对象
String(byte[] bytes,int offset,int length);通过byte数组,从offset开始,总共length长的字节构造字符串对象
String(char[] value); 通过char数组构造字符串对象
String(byte[] char,int offset,int length) ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号