IO面试题

IO面试题

大量培训机构课程资源,需要加V:【blwxzy_188】

1、Java中的IO流分为几种

  • 按照流的流向分,可以分为输入流和输出流;

  • 按照操作单元划分,可以划分为字节流和字符流;

    Java IO 流共涉及 40 多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派⽣出来的。

    • InputStream/Reader: 所有的输⼊流的基类,前者是字节输⼊流,后者是字符输⼊流。
    • OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

img

2、既然已经有了字节流,为什么还要有字符流

字符流是由 Java 虚拟机将字节转换得到的,问题就出在这个过程还算是非常耗时,并且,如果我们不知道编码类型就很容易出现乱码问题。所以, I/O 流就干脆提供了⼀个直接操作字符的接口,方便我们平时对字符进行操作。如音频文件、图片等媒体文件用字节流比较好,如果涉及到字符的话使用字符流比较好。 比如:文本文件,目前文本文件只能用字符流来进行操作,字节流被称为万能流。

3、BIO、NIO、AIO的区别

  • BIO (Blocking I/O): 同步阻塞 I/O 模式,最垃圾的一种IO模型,数据的读取写入必须阻塞在⼀个线程内等待其完成。【读写都挤在一个线程里,能读的时候,不能写,能写的时候不能读,可以启动多个线程,让每个线程干不同的事,比如一个线程专门读,另一个线程专门写】在活动连接数不是特别高(小于单机 1000)的情况下,这种模型是比较不错的,可以让每⼀个连接专注于自己的 I/O 并且编程模型简单,也不⽤过多考虑系统的过载、限流等问题。线程池本身就是⼀个天然的漏⽃,可以缓冲⼀些系统处理不了的连接或请求。但是,当面对十万甚至百万级连接的时候,传统的 BIO 模型是⽆能为力的。因此,我们需要⼀种更高效的 I/O 处理模型来应对更⾼的并发量。

    image-20210421112214938

  • NIO (Non-blocking/New I/O): NIO 是⼀种同步非阻塞的 I/O 模型, 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上epoll,多路复用器轮询到连接有 I/O 请求就进行处理。“看哪个人还没有工作 ,就把这个IO请求扔给该人”

    image-20210421112614592

  • AIO (Asynchronous I/O): 异步非阻塞的 IO 模型。异步 IO 是基于事件和回调机制实现的,也就是应⽤操作之后会直接返回,不会堵塞在那⾥,当后台处理完成,操作系统会通知相应的线程进行后续的操作。AIO 是异步 IO 的缩写,主要使用于Windows系统。

AIO模型只有Windows支持,Linux不支持

Linux只支持NIO

Netty封装的是NIO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚂蚁爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值