乐趣区

关于java: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 的综合性能最优;

退出移动版