IO,input和output,Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。

IO是什么?为什么需要IO?

java在1.4之前,提供的是BIO,也就是java.io包下的的东西,同步阻塞。
在1.4之后,提供了NIO(New IO),在java.nio包下,同步非阻塞。
在java7,提供了AIO,也在java.nio.channels包下,只不过新增了几个异步通道,异步非阻塞。

IO是啥

Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的。

可以看出来,IO主要是读写东西用的,至于读写的东西从哪来到哪去,并无具体限制,所以,我们可以从文件读:FileInputStream,可以从管道读:PipedInputStream等等。

没有IO会影响什么?

我是这么理解的,没有IO的java,相当于一个不能和外界沟通的程序,我们编写一个java程序,一般都需要输入输出,而IO就是帮助我们来和程序进行交互的通道,我们在键盘上的输入通过IO传输给程序,程序的输出通过显示屏展示给我们。
没有IO,java程序也就不可能做到网络编程,只能单机自己玩,因为它无法和其他程序进行通信。

IO可以用来做什么?

  • 读写文件
  • 接口调用
  • 数据输出
  • 网络IO通信

Tomcat和Jetty与IO啥关系

tomcat6默认就使用的BIO,而且也只有BIO。
tomcat7和tomcat8都开始支持APR模式(简单理解,就是利用JNI从操作系统级别解决异步IO问题,大幅度的提高服务器的处理和响应性能,也是Tomcat运行高并发应用的首选模式。),但是观察源码就会发现,tomcat7在没有APR配置的情况下会选择BIO。tomcat8在没有检测到APR配置的情况下会选择NIO。
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。 NIO是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。适用于连接数目多且连接比较短(轻操作)的架构。 AIO(NIO2)方式使用于连接数目多且连接比较长(重操作)的架构,充分调用OS参与并发操作,编程比较复杂。
tomcat8开始支持APR利用JNI调用本地API,大幅度提高了tomcat的IO性能,是tomcat的“大杀器”,但是如果要使用APR就要安装对应 的组件。

Jetty一开始也使用的BIO,随着版本更新升级了NIO,

socket和IO啥关系

我是这样理解的,IO是socket实现的一部分,socket负责把数据从别处取过来,IO负责读取过来的数据,而且一般讨论socket和IO,这个IO会是指linux的IO,而不是java的IO,毕竟java的IO其实也只是封装了linux的IO。
供参考:Linux常见IO模型
BIO,NIO,AIO都有相对应的socket实现。
不过这篇文章和我的理解有出入,我再研究下:AIO Socket 编程 原理篇

连接数据库和IO有关系吗?

java中,连接数据库一般都是用jdbc,jdbc的底层进行连接使用socket,socket一般都是阻塞IO,也就是BIO。
but,java13的时候

但是我还没研究清楚,这算不算是使用了NIO。

java中的NIO,BIO,AIO相关推荐

  1. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  2. java中io.nio.aio_Java中网络IO的实现方式-BIO、NIO、AIO

    在网络编程中,接触到最多的就是利用Socket进行网络通信开发.在Java中主要是以下三种实现方式BIO.NIO.AIO. 关于这三个概念的辨析以前一直都是好像懂,但是表达的不是很清楚,下面做个总结完 ...

  3. java IO、NIO、AIO详解

    概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调 ...

  4. 深入理解JAVA中的NIO

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 传统的 IO 流还是有很多缺陷的,尤其它的阻塞性加上磁盘读写本来就慢,会导致 CPU 使用效率大大降低. 所以,jdk ...

  5. Java中的NIO非阻塞编程

    在JDK1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞API.对于大多数应用来说,这样的API使用很方便,然而,一些对性能要求较高的应用,尤其是服务端应用,往往需要一个更为 ...

  6. java nio有哪些功能_如何真正理解java中的NIO?

    从历史进程来看可能会比较好 早期计算机性能较差的情况下反正你同时也没法同时处理很多io,不如开一个就阻塞在那边,程序员编程也省事,别的花里胡哨的骚操作还未必有这种方式性能高,这个叫做bio 后面cpu ...

  7. java 中的NIO

    NIO 概念 NIO: New IO. Non-Blocking IO. NIO 是JDK1.4的时候出现了⼀个新的IO, ⽤来替代传统的IO流. NIO与IO有着相同的功能, 但是操作的⽅法不同.J ...

  8. 了解一下JAVA中的NIO模块

    网上资料大把,但要写写代码,我这个年纪的人才有一点点记忆了.. 参考URL: http://blog.csdn.net/wuxianglong/article/details/6612282 pack ...

  9. 常见的 IO 模型有哪些?Java 中 BIO、NIO、AIO 的区别?

    IO 模型这块确实挺难理解的,需要太多计算机底层知识.写这篇文章用了挺久,就非常希望能把我所知道的讲出来吧!希望朋友们能有收货!为了写这篇文章,还翻看了一下<UNIX 网络编程>这本书,太 ...

最新文章

  1. 学会放下包袱,热爱单例
  2. MacPro 系统空间竟占90G,如何清理--OmniDiskSweeper
  3. MySQL 全局锁和表锁
  4. 张俊红22岁年度总结
  5. SRAM BIST技术学习
  6. SPM-using Maven and Juint
  7. [vb]FindWindow使用方法
  8. mybatis直接执行sql_拼多多二面:Mybatis是如何执行一条SQL命令的?
  9. Java基础0309
  10. 【python写一个无限弹窗】
  11. 13分钟搭建动易PHP论坛(OS:Linux)
  12. 台式计算机硬件组装步骤,【电脑组装教程】DIY台式电脑新手组装+安装系统多图全教程...
  13. 【python】pandas的excel处理:员工薪水分析
  14. android标签云:LabelView
  15. Java批量高效压缩支持加解密支持所有压缩格式(Zip/7z/rar)
  16. java中什么叫引用
  17. VM虚拟机20G磁盘扩展到40G的Linux操作记录
  18. Mac删除文件不经过废纸篓直接删除,提示“将立即删除此项目。您不能撤销此操作”的方案
  19. GEE|.updateMask()用法示例
  20. Life:最新上海落户政策(以一名普通研究生为例计分)

热门文章

  1. 高德citycode和国家citycode编码转换
  2. 优品商城-建表(user、member-goods、goods_cart、category、order、spec-address、province、city、county)
  3. mysql如何恢复单表_MySQL如何恢复单库或单表,以及可能遇到的坑
  4. Qt MetaObject sysmtem 详解之三:QMetaObject接口实现
  5. python class namedtuple 效率_菜鸟世界 -python进阶之 namedtuple
  6. 阿里云服务器是干什么用的?
  7. 好看的常用背景色RGB数值
  8. Python中如何编写接口,以及如何请求外部接口
  9. 几个学习软件测试的网站
  10. 人脸检测or五官检测