今天来说说IO

一、IO是什么?

IO就是input和output。简单的解释就是输入和输入,针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存映射I/O, Direct I/O、数据库I/O等,只要具有输入输出类型的交互系统都可以认为是I/O系统。那么Java是怎么操作这些IO呢。

二、JavaIO体系

Java 的 I/O 大概可以分成以下几类:

  • 磁盘操作:File
  • 字节操作:InputStream 和 OutputStream
  • 字符操作:Reader 和 Writer
  • 对象操作:Serializable
  • 网络操作:Socket
  • 新的输入/输出:NIO

2.1磁盘操作:

1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类

2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较

2.2字节和字符操作:

字节流:数据流中最小的数据单元是字节.

字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节(无论中文还是英文都是两个字节)。

字节和字符流的区别:

1. 字节流适合所有类型文件的数据传输,因为计算机字节(Byte),是电脑中表示信息含义的最小单位。字符只能够处理纯文本数据,其他数据类型不行,但是字符流处理文本比字节流处理文本要方便。

2.在读写文件需要对内容按行处理,处理行级别选择字符流,只是读写文件,与内容无关选择字节流。

JavaIO中的设计模式

使用装饰器和适配器模式

适配器模式:把一个类的接口变成客户端所期望的接口,而使两个原本接口不匹配放在一起工做

Reader reader = new INputStreamReader(inputStream);

装饰器模式:一种动态的往一个类中添加行为的模式,装饰器模式相比于子类更加灵活,其在于给某个对象加而不是整个类加。

new BufferedInputStream(new FileInputStream( inputStream));

阻塞IO和非阻塞IO

IO操作包括:对于硬盘的读写,对于socket的读写及外设的读写。

当用户发起一个IO请求操作时,内核就去查看读取的数据是否就绪,对于阻塞IO来说,如果数据没有就绪,则会一直等待,指导数据就绪,对于非阻塞IO来说,如果数据没有就绪,则会返回一个标志信息告知用户线程当前读取的数据未就绪,当数据就绪之后,便将数据拷贝到用户线程。这样才算完成了一个完整的IO请求操作。

BIO、NIO、AIO的区别

        BIO:同步并阻塞,在服务器中实现模式为一个连接一个线程,当客户端发起读写请求时,服务器就需要启动一个线程进行处理,如果这个连接不做任何事情,就会造成不必要的开销。当前也可以通过线程池机制来改善。

NIO:同步并非阻塞,在服务器实现的模式为一个请求一个线程,客户端发送的请求都会注册到多路复用器上,多路复用器轮询有连接IO请求操作才会启动一个线程进行处理,NIO一般适用于连接数剧目比较多,连接毕竟短的架构

AIO异步并非阻塞,在服务器实现模式为一个有限有效请求一个线程,当客户端的IO请求都是通过操作系统先完成之后,在通知服务器去启动线程进行处理。一般适用于连接数目比较多,连接比较长的架构。


总结

IO操作

面试之Java圣经8相关推荐

  1. 面试之Java圣经1

    第一部分Java之面向对象 前言 我又回来了,哈哈哈哈哈哈哈,这次裸辞准备春招,冲冲冲.整理一下学习到的知识. Java是一门面向对象语言,它具备了C++的各种优点,同时放弃了多继承和指针.因此功能很 ...

  2. 面试之Java圣经6

    今天来聊聊Java开发的天花板,线程,threadlocal 一.进程和线程的区别? 一个进程就是程序执行需要从代码加载,代码执行到执行完毕的一个完整的过程.由于 CPU 具备分时机制,所以每个进程都 ...

  3. Java 面试的“完美圣经”,有了这些还愁面试吗?

    经过 20 多位一线互联网大厂老师整合最新的 Java 架构师面试题后,成功总结出了这份 Java 架构师面试 PDF,我愿意称它为 Java 面试的"完美圣经"! 如果同学们对这 ...

  4. 热点面试题目—Java异常

    在面试时Java异常常被问到,很多人做足了准备但在实际面试中,仍然不能很准确的回答Java异常的问题.到底面试官会怎样提问?针对你的回答又会怎样深挖呢?今天小编就通过一个面试场景模拟,来帮助猿猿们更好 ...

  5. Android面试:Java相关

    Android面试常见Java相关问题. 原文链接:http://www.nowcoder.com/discuss/3244 Switch能否用string做参数? 在 Java 7 之前, swit ...

  6. java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...

    前言: 虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面.面试开始会让自我介绍,主要业务架构和技术架构两部分.业务架构一般不会深究,但要面试官听明白,并且一般面 ...

  7. java面试加分_不只是给面试加分 -- Java WeakReference的理解与使用

    前言: 看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. 他没有期望有人能够完整解释清楚weak refere ...

  8. 300小时成为java程序员_直击面试现场: Java程序员3轮6小时面试, 成功拿到阿里offer!...

    原标题:直击面试现场: Java程序员3轮6小时面试, 成功拿到阿里offer! 今天给大家分享一位Java程序员小伙去阿里应聘的经历! 从Java开发要掌握的技术来讲,前面已经说得差不多了.我主要想 ...

  9. 面试:Java分派机制

    面试:Java分派机制 在Java中,符合"编译时可知,运行时不可变"这个要求的方法主要是静态方法和私有方法.这两种方法都不能通过继承或别的方法重写,因此它们适合在类加载时进行解析 ...

最新文章

  1. 谷歌的量子计算机如何改变世界
  2. 在一个空的Eclipse中安装Android开发的ADT和SDK
  3. Hadoop大数据——mapreduce的secondary排序机制
  4. HDU 1175 连连看
  5. C#里面SQLite读取数据的操作
  6. A20成功驱动FT5206触摸屏
  7. Linux 之父怒删工程师提交的补丁,称“太蠢了”网友:怼得好!
  8. python3库安装_Python3 Requirements库安装过程
  9. 点击清空文本框+++文本杠上敲回车提交
  10. redis list操作_PHP操作Redis相关函数
  11. Windows个人常用软件推荐
  12. 非合作博弈篇——非合作博弈的矩阵表示
  13. Thinkpad T400 解决PCI 内存控制器设备黄色感叹号问题
  14. python爬取笔趣阁小说
  15. python爬虫-喜马拉雅_晚安妈妈睡前故事
  16. 金蝶服务器系统用什么,金蝶用哪个云服务器
  17. 华为手机桌面角标开发
  18. javafx设置背景图片
  19. matlab加速度转化为位移,matlab数值积分实现加速度、速度、位移的转换(时域频域积分)...
  20. CAD使用教程问题合集

热门文章

  1. Kernel: x86: preempt_count, per-cpu(每个CPU一份的变量)
  2. 乐1s 乐视X502_官方线刷包_救砖包_解账户锁
  3. SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动
  4. 苏宁易购2017年净利润暴涨五倍,资本价值被低估
  5. 爬取盗墓笔记存放csv中
  6. protobuf 入门
  7. SQL Server提示:安装程序无法与下载服务器联系。请提供 Microsoft机器学习服务器安装文件的位置。。。。
  8. newcoder错题集
  9. Linux中的同步时间服务
  10. python与爬虫入门演示