java 核心技术之基础篇(三)

1、java 中提供了那些IO方式?NIO如何实现多路复用?java

   java IO 方式有不少种,基于不一样的IO抽象模型和交互方式,进行简单区分。编程

 首先,传统的java.io 包,基于流模型实现,提供了咱们最熟悉的一些IO功能,好比File抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或写入流时,在读、写动做完成前,线程会一直阻塞在那里,他们之间的调用是可靠地线性顺序。

   java.io 包得好处是代码比较简单、直观、缺点是IO效率和扩展性存在局限性,容易成为使用时应用性能的瓶颈。网络

   不少时候,人们把java.net 下面提供的部分网络API,好比Socke、ServerSocket、HttpURLConnection 也归类到同步阻塞IO类库,由于网络通讯一样是IO行为。框架

   第二,在java1.4中引入了NIO框架(java.nio包),提供了Channel、Selector、Buffer等新抽象,能够构建多路复用、同步非阻塞IO程序,同时提供了更接近操做系统的高性能数据操做方式。异步

  第三,在java7 中,NIO有了进一步改进,也叫NIO2,引入了异步非阻塞的方式,也叫AIO(Asynchronous IO),异步操做基于事件和回调机制,简单理解为,应用操做直接返回,不会阻塞在那里,当后台处理完成时,操做系统会通知相应线程进行后续工做。性能

 

知识扩展:编码

首先澄清一些基本概念:spa

。区分同步异步(synchronous/asynchronous),简单说就是,同步是一种可靠地有序运行机制,当咱们进行同步操做时,后续任务是等待当前调用返回,才会进行下一步;异步则相反,其余任务不须要等待当前调用返回,一般依靠事件、回调等机制来实现任务间次序关系操作系统

。区分阻塞非阻塞,当进行阻塞操做时,当前线程会出于阻塞状态,没法从事其余任务,只有当条件就绪才能继续,好比ServerSocket 新链接创建完毕,或数据读取、写入操做完成;而非阻塞则无论IO操做是否结束,直接返回,响应操做在后台完成。.net

 

这里还须要理解:

。IO不单单是对文件的操做,在网络编程中,好比Socket 通讯,都是典型的IO操做目标;

。Reader/Writer则用于操做字符,增长字符编码等功能,适用于相似从文件中读取或者写入文本信息,本质上计算机操做的都是字节,无论是网络通讯仍是文件读取,Reader/writer 至关于构建了应用逻辑和原始数据之间的桥梁。

。BufferedOutputStream 等带缓冲区的实现,能够避免频繁的磁盘读写,进而提升IO处理效率。这种设计利用了缓冲区,将批量数据进行了一次操做,但在使用中千

万不要忘了flush.

 

 

 

 

 

 

 

 

.---------------------------------------------未完待续的分割线-----------------------------------------------------------

相关文章
相关标签/搜索