javaIO、NIO、AIO详解 _原创精品文档.pdfVIP

javaIO、NIO、AIO详解 _原创精品文档.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

javaIO、NIO、AIO详解

概述

在我们学习Java的IO流之前,我们都要了解⼏个关键词

同步与异步(synchronous/asynchronous):同步是⼀种可靠的有序运⾏机制,当我们进⾏同步操作时,后续的任务是等待当前调⽤

返回,才会进⾏下⼀步;⽽异步则相反,其他任务不需要等待当前调⽤返回,通常依靠事件、回调等机制来实现任务间次序关系

阻塞与⾮阻塞:在进⾏阻塞操作时,当前线程会处于阻塞状态,⽆法从事其他任务,只有当条件就绪才能继续,⽐如ServerSocket新

连接建⽴完毕,或者数据读取、写⼊操作完成;⽽⾮阻塞则是不管IO操作是否结束,直接返回,相应操作在后台继续处理

同步和异步的概念:实际的I/O操作

同步是⽤户线程发起I/O请求后需要等待或者轮询内核I/O操作完成后才能继续执⾏

异步是⽤户线程发起I/O请求后仍需要继续执⾏,当内核I/O操作完成后会通知⽤户线程,或者调⽤⽤户线程注册的回调函数

阻塞和⾮阻塞的概念:发起I/O请求

阻塞是指I/O操作需要彻底完成后才能返回⽤户空间

⾮阻塞是指I/O操作被调⽤后⽴即返回⼀个状态值,⽆需等I/O操作彻底完成

BIO、NIO、AIO的概述

⾸先,传统的java.io包,它基于流模型实现,提供了我们最熟知的⼀些IO功能,⽐如File抽象、输⼊输出流等。交互⽅式是同步、阻塞的

⽅式,也就是说,在读取输⼊流或者写⼊输出流时,在读、写动作完成之前,线程会⼀直阻塞在那⾥,它们之间的调⽤是可靠的线性顺序。

java.io包的好处是代码⽐较简单、直观,缺点则是IO效率和扩展性存在局限性,容易成为应⽤性能的瓶颈。

很多时候,⼈们也把下⾯提供的部分⽹络API,⽐如Socket、ServerSocket、HttpURLConnection也归类到同步阻塞IO类库,因

为⽹络通信同样是IO⾏为。

第⼆,在Java1.4中引⼊了NIO框架(java.nio包),提供了Channel、Selector、Buffer等新的抽象,可以构建多路复⽤的、同步⾮阻塞

IO程序,同时提供了更接近操作系统底层的⾼性能数据操作⽅式。

第三,在Java7中,NIO有了进⼀步的改进,也就是NIO2,引⼊了异步⾮阻塞IO⽅式,也有很多⼈叫它AIO(AsynchronousIO)。异

步IO操作基于事件和回调机制,可以简单理解为,应⽤操作直接返回,⽽不会阻塞在那⾥,当后台处理完成,操作系统会通知相应线程进

⾏后续⼯作。

⼀、IO流(同步、阻塞)

1、概述

IO流简单来说就是input和output流,IO流主要是⽤来处理设备之间的数据传输,JavaIO对于数据的操作都是通过流实现的,⽽java⽤于操作

流的对象都在IO包中。

2、分类

按操作数据分为:字节流(InputStream、OutputStream)和字符流(Reader、Writer)

按流向分:输⼊流(Reader、InputStream)和输出流(Writer、OutputStream)

3、字符流

概述

只⽤来处理⽂本数据

数据最常见的表现形式是⽂件,字符流⽤来操作⽂件的⼦类⼀般是FileReader和FileWriter

字符流读写⽂件注意事项:

写⼊⽂件必须要⽤flush()刷新

⽤完流记得要关闭流

使⽤流对象要抛出IO异常

定义⽂件路径时,可以⽤/或者\

在创建⼀个⽂件时,如果⽬录下有同名⽂件将被覆盖

在读取⽂件时,必须保证该⽂件已存在,否则抛出异常

字符流的缓冲区

缓冲区的出现是为了提⾼流的操作效率⽽出现的

需要被提⾼效率的流作为参数传递给缓冲区的构造函数

在缓冲区中封装了⼀个数组,存⼊数据后⼀次取出

4、字节流

概述

⽤来处理媒体数据

字节流读写⽂件注意事项:

字节流和字符流的基本操作是相同的,但是想要操作媒体流就需要⽤到字节流

字节流因为操作的是字节,所以可以⽤来操作媒体⽂件(媒体⽂件也是以字节存储的)

输⼊流(InputStream)、输出流(OutputStream)

字节流操作可以不⽤刷新流操作

InputStream特有⽅法:intavailable()(返回⽂件中的字节个数)

字节流的缓冲区

字节流缓冲区跟字符流缓冲区⼀样,也是为了提⾼效率

5、JavaScanner类

Java5添加了java.util.Scanner类,这是⼀个⽤于扫描输⼊⽂本的新的实⽤程序

文档评论(0)

153****8750 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档