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