面试之Java圣经8

本文详细介绍了Java的IO系统,包括IO的概念、Java IO体系结构,重点讲解了磁盘操作、字节和字符操作的区别,以及Java IO中的设计模式——装饰器和适配器模式。同时,讨论了阻塞IO和非阻塞IO,对比了BIO、NIO、AIO的区别。
摘要由CSDN通过智能技术生成

今天来说说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操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值