JAVA NIO系列的基本操作

JAVA NIO系列的基本概念
NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

Sun官方标榜的特性如下:

为所有的原始类型提供(Buffer)缓存支持

字符集编码解码方案

Channel:一个新的原始I/O抽象

支持锁和内存映射文件的文件访问接口

提供多路(non-blocking)非阻塞式的高伸缩性网络I/O

NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。

Java NIO和IO的主要区别

通道和缓冲区

Java NIO系统的核心在于:通道(Channel)和缓冲区(Buffer)。 通道表示打开IO设备(比如文件、套接字等)的连接。若需要使用NIO系统,需要获取用于连接IO设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区对数据进行处理。

简而言之。Channel负责传输,Buffer负责存储。

JDK7的NIO2特性或许是我最期待的,我一直想基于它写一个高性能的Java Http Server.现在这个想法终于可以实施了。

  本人基于目前最新的JDK7 b76开发了一个HTTP Server性能确实不错。

  在windows平台上NIO2采用AccpetEx来异步接受连接,并且读写全都关联到IOCP完成端口。不仅如此,为了方便开发者使用,连IOCP工作线程都封装好了,你只要提供线程池就OK。

  但是要注意,IOCP工作线程的线程池必须是 Fix的,因为你发出的读写请求都关联到相应的线程上,如果线程死了,那读写完成情况是不知道的。

  作为一个Http Server,传送文件是必不可少的功能,那一般文件的传送都是要把程序里的buffer拷贝到内核的buffer,由内核发送出去的。windows平台上为这种情况提供了很好的解决方案,使用TransmitFile接口

Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

相比JDK原生NIO,Netty提供了相对十分简单易用的API,非常适合网络编程。Netty是完全基于NIO实现的,所以Netty是异步的。

作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

Netty无疑是NIO的老大,它的健壮性、功能、性能、可定制性和可扩展性在同类框架都是首屈一指的。HantecMarkets亨达返佣https://www.kaifx.cn/broker/h...,如Hadoop的RPC框架Avro、RocketMQ以及主流的分布式通信框架Dubbo等等。

为什么这么火,是有原因的。

Netty的优点可以总结如下

1、API使用简单,开发门槛低;

2、功能强大,预置了多种编解码功能,支持多种主流协议;

3、定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;

4、性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;

你可能感兴趣的:(java)