《Java NIO》学习笔记一 NIO与标准I/O比较

4 篇文章 0 订阅

首先先与标准I/O做个比较,这样更容易看出NIO的特点:

NIO包(java.nio.*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O类中的一些问题。

1Buffer:它是包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。

2Charset:它提供Unicode字符串影射到字节序列以及逆影射的操作。

3Channels:包含socketfilepipe三种管道,它实际上是双向交流的通道。

4、Selector:它将多元异步I/O操作集中到一个或多个线程中。

两者比较:

1、数据的读写操作

标准的IO是基于字节流和字符流进行操作的,它不能前后移动流中的数据,NIO是基于通道(Channel)和缓冲区(Buffer)进行操作的,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中需要时可以在缓冲区中前后移动所保存的数据。

2、非阻塞

在标准IOSocket编程中,套接字的某些操作可能会造成阻塞:accept()方法的调用可能会因为等待一个客户端连接而阻塞,read()方法也可能会因为没有数据可读而阻塞,write()方法在数据没有完全写入时也可能会发生阻塞,阻塞发生时,该线程被挂起,什么也干不了。

而在基于NIOTCP通信中,具有非阻塞的特点,非阻塞网络IO的特点简单的说就是:线程在等待连接,写数据等(标准IO中的阻塞操作)的同时,也可以做其他事情,这便实现了线程的异步操作。

3、选择器

Java NIO引入了选择器的概念,选择器可以监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道,这也是非阻塞IO的核心。而在标准IOSocket编程中,单个线程则只能在一个端口监听。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值