Java IO核心知识提问点

  1. 什么是 IO?

    答案:IO 即输入输出(Input/Output),是指数据在内存与外部设备之间的传输,比如程序从文件中读取数据到内存,或者将内存中的数据写入到文件、网络等外部设备中。在 Java 类库中,IO 部分涉及标准输入输出、文件操作、网络数据传输流等多个领域。
  2. Java 中的 IO 模型有哪些?

    答案:Java 中的 IO 模型主要有 BIO(Blocking IO,阻塞 IO)、NIO(Non - blocking IO,非阻塞 IO)和 AIO(Asynchronous IO,异步 IO)。BIO 是同步阻塞的,服务器实现一个连接一个线程;NIO 是同步非阻塞的,通过多路复用器轮询连接的 IO 请求;AIO 是异步非阻塞的,由操作系统先完成 IO 操作再通知服务器应用。
  3. 字节流与字符流的区别?分别有哪些核心类?

    答案:字节流以字节(8 位)为单位处理数据,适用于所有类型文件,核心类有 InputStream/OutputStream、FileInputStream/FileOutputStream 等;字符流以字符(16 位 Unicode)为单位处理数据,适用于文本文件,核心类有 Reader/Writer、FileReader/FileWriter 等。字节流直接操作字节,字符流通过字符编码转换字节,需注意编码不一致导致的乱码问题。
  4. BIO 和 NIO 的本质区别是什么?

    答案:BIO 是面向流的,读写操作阻塞线程,一个连接对应一个线程,在高并发下容易导致资源耗尽;NIO 是面向缓冲区的,支持非阻塞操作,通过 Selector 实现 “一个线程管理多个连接”,更适合高并发场景。
  5. NIO 的三大核心组件是什么?各自的作用?

    答案:NIO 的三大核心组件是 Buffer(缓冲区)、Channel(通道)和 Selector(选择器)。Buffer 用于存储读写的数据,是数据容器;Channel 是双向数据通道,可读写数据并关联缓冲区;Selector 是多路复用器,一个线程可监控多个 Channel 的事件,实现非阻塞 IO 管理。
  6. 什么是同步 IO 和异步 IO?请简述它们的区别。

    答案:同步 IO 中,一个 IO 操作必须在完成之前,其他所有操作都必须等待,会阻止程序的执行;异步 IO 中,一个 IO 操作的开始和结束是分离的,程序在 IO 操作开始后可以继续执行其他操作,当 IO 操作完成时会收到通知。区别在于同步 IO 操作会阻塞程序执行,而异步 IO 操作允许程序在 IO 操作完成之前继续执行其他任务。
  7. 在 Java 中如何实现异步 IO 操作?

    答案:在 Java 中,异步 IO 主要通过 NIO 库实现,尤其是 NIO.2。可以使用 java.nio.channels 包中的 AsynchronousFileChannel 类进行异步文件 IO 操作,或者对于网络操作使用 AsynchronousSocketChannel 和 AsynchronousServerSocketChannel 类。可以通过 Future 对象检查操作是否完成,也可以通过实现 CompletionHandler 接口以回调的方式在操作完成时异步地得到通知。
  8. Buffer 的 flip ()、rewind ()、clear () 方法的区别?

    答案:flip () 方法用于切换为读模式,会将 limit 设置为当前 position,position 设置为 0;rewind () 方法用于重置读指针,将 position 设置为 0,limit 不变;clear () 方法用于清空缓冲区,将 position 设置为 0,limit 设置为 capacity,但数据并未真正删除,后续写入会覆盖原有数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值