当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

JDK1.4非阻塞套接字API概述[Java编程]

赞助商链接



  本文“JDK1.4非阻塞套接字API概述[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

J2SE 1.4版引入了非隔绝套接字(Nonblocking sockets),它答应在网络通信利用程序和没有隔绝的进程中利用套接字.本文将具体介绍什么是非隔绝套接字(Nonblocking sockets)及其工作原理和用处.

从Java 1.4起,程序员便能用一组新的API来举行I/O操作.这是JSR 51项目的后果,自2000年1月的Java 1.4 beta版,程序员便可以利用JSR 51了.在Java 1.4中增添了一些非常重要的新技术来处理诸如在文件和套接字上举行高性能的读/写操作,正规表达式,译码/编码字符集,内存映射和文件锁定.在这篇文章中,我们将谈论一个特别的新API――New I/O API: Nonblocking sockets.

非隔绝套接字答应在通道上做输入/输出操作而不用阻塞该通道的进程.本文中我将谈论异步高性能读/写操作和翻转上下计划和开辟基于接口的利用程序的本领.

Java开辟者大概会问,为什么介绍一种新的技术来处理套接字?Java 1.3.x的套接字又有哪些问题?假定实现服务器端承受差别的客户端的衔接.一样,假定客户端能支持处理同步的多恳求.利用Java 1.3.x,开辟这样的服务器端有两种差别的挑选:

●实现多线程服务为每个衔接用户处理线程.

●利用外部第三方模块.

这两种办法都可以实现,但是假如实用第一种办法――整个线程管理筹划,包含相关并发性和冲突问题――都需求靠程序员来处理.第二个筹划大概耗费更大,且使利用程序依靠“non-JDK”的外部模块.依靠非隔绝套接字,你能实现非隔绝的服务无需直接纳理线程大概采取外部模块.

Buffer

在我们考虑非隔绝套接字从前,不得不耗费一些时间在一个新的Java 1.4的类:java.nio.Buffer上.一个Buffer实例只是原始数据的一个有限的容器.称其有限是因为它只能包含有限数目的字节;换句语说,它不是一个像Vector或是ArrayList一样的容器,后二者从理论上说是没有限度的.别的,一个Buffer实例仅能包含属于Java的基本数据范例.比方:int,char,double,Boolean,等等.

Buffer类是一个抽象类,它有7个子类辨别对应于七种基本的数据范例:

●ByteBuffer

●CharBuffer

●DoubleBuffer

●FloatBuffer

●IntBuffer

●LongBuffer

●ShortBuffer

在非隔绝套接字编程中,普通全部新 I/O系统能工作的环境中,极端重要的是办理Buffer对象若何工作.这是因为新套接字通道利用Buffer对象通过网络来传送数据.

你可以利用以下静态办法(即类办法)来成立一个新的Buffer实例:allocate,allocateDirect,wrap.在下面的例子中,三个Buffer对象将用三种差别的办法来实例化.

ByteBuffer buffer1 = ByteBuffer.allocate(1024);
ByteBuffer buffer2 = ByteBuffer.allocateDirect(1024);
ByteBuffer buffer3 = ByteBuffer.wrap(new String("hello").getBytes());

这段代码的前两行成立了两个ByteBuffer对象,它们都包含1024个字节.allocate和allocateDirect办法都做了相同的工作,差别的是第二个办法直接利用操作系统来分配Buffer.从而它将供应更快的拜候速度.不幸的是,并非全部的虚拟机都支持这种直接分配的办法.第三行利用wrap办法.它成立了一个ByteBuffer对象,包含的字节由字符串“hello”构成.

Buffer对象的作用或多或少的与流的作用类似.“当前位置(current position)”是一个极端重要的概念,它计算出你将要处理的Buffer对象的得当的位置.在任什么时刻候,一个Buffer对象都有一个当前位置指向某一项.之后,每一次读或写操作城市自动的将当前位置指向Buffer中的下一项.

你可以用put办法写入一些数据到Buffer中:

// Writing on a buffer
IntBuffer buffer = IntBuffer.allocate(10);
for (int i=0; i < buffer.capacity(); i++) {
buffer.put(i);
}

这段代码成立了一个包含10个整型值的Buffer,然后将数字0到9放入到Buffer中.同时你可以看到,我利用了capacity办法来得到Buffer的容量.


  以上是“JDK1.4非阻塞套接字API概述[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>CentOS下Tomcat 5.5 与 jdk1.6安装</b>
  • 操作JDK1.5新工具举行系统性能监测
  • <b>XP下JDK1.4安装与环境配置无缺图解</b>
  • JDK1.5摆列典范学习
  • JDK1.4下实现访谒WIN32注册表
  • JDK1.4非阻塞套接字API概述
  • <b>摸索JDK1.5高级编码特点</b>
  • JDK1.5新特点介绍
  • JDK1.6调集类UML图, 更好的操纵Collection类
  • JDK1.5中增添enum类与数据库表举行映射
  • <b>在CentOS下利用jdk1.6运行Tomcat6</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .