IO与NIO专项测试题(含详细答案解析)_第1页
IO与NIO专项测试题(含详细答案解析)_第2页
IO与NIO专项测试题(含详细答案解析)_第3页
IO与NIO专项测试题(含详细答案解析)_第4页
IO与NIO专项测试题(含详细答案解析)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IO与NIO专项测试题(含详细答案解析)适用场景:Java基础进阶考核、面试刷题、期末测试考试时长:60分钟满分:100分一、单项选择题(共10题,每题3分,共30分)1.下列关于Java传统IO(BIO)的核心特点,说法正确的是()A.非阻塞、同步、面向缓冲区B.阻塞、同步、面向流C.非阻塞、异步、面向流D.阻塞、异步、面向缓冲区2.Java中用于读取文本文件的高效字符输入流是()A.FileInputStreamB.BufferedReaderC.BufferedReaderD.FileOutputStream3.NIO中负责数据存储、读写操作的核心组件是()A.ChannelB.BufferC.SelectorD.Socket4.下列不属于NIO缓冲区(Buffer)核心属性的是()A.capacityB.limitC.positionD.length5.关于Channel通道,下列说法错误的是()A.通道是双向的,可读写数据B.通道可以直接读写数据,无需缓冲区C.通道支持异步读写数据D.FileChannel是文件操作的核心通道6.NIO选择器(Selector)的核心作用是()A.缓存读写数据,提升IO效率B.监听多个通道的IO就绪事件,实现单线程管理多通道C.建立网络连接,传输数据D.阻塞等待数据写入完成7.传统IO中,字节流和字符流的核心区别是()A.字节流速度更快,字符流速度较慢B.字节流处理所有类型文件,字符流仅处理文本文件C.字节流带缓冲区,字符流无缓冲区D.字节流是同步的,字符流是异步的8.Buffer的flip()方法主要作用是()A.清空缓冲区所有数据B.将写入模式切换为读取模式C.将读取模式切换为写入模式D.重置position为09.下列属于NIO阻塞问题的是()A.单线程无法处理多个连接B.通道读写默认非阻塞,无需等待C.Selector监听事件会阻塞线程D.缓冲区读写操作全程阻塞A.BIO适合高并发、海量连接场景B.NIO是同步非阻塞IO,适合中高并发场景D.NIO必须依赖多线程实现并发二、填空题(共5题,每题4分,共20分)1.传统JavaIO分为________和________两大类,其中________专门用于处理文本字符数据。2.NIO的三大核心组件是________、________、________。3.Buffer缓冲区的三个核心属性中,________代表缓冲区最大容量,________代表当前读写位置,________代表读写边界。4.JavaNIO中,网络编程常用的通道有________和________。5.BIO是________同步阻塞IO,NIO是________同步非阻塞IO。三、简答题(共3题,每题10分,共30分)1.简述BIO和NIO的核心区别,分别说明适用场景。2.详细说明Buffer缓冲区中clear()、flip()、rewind()三个方法的作用及使用场景。3.简述NIOSelector的工作原理,说明如何实现单线程处理多连接。四、编程题(共1题,20分)使用JavaNIO实现文件复制功能,要求:1.利用FileChannel和ByteBuffer实现,不使用传统IO流;2.处理文件不存在、读写异常等情况;3.代码结构规范,添加必要注释,资源正常关闭。参考答案及详细解析一、单项选择题答案解析1.答案:B解析:传统BIO(阻塞IO)核心特性为同步、阻塞、面向流。每次IO操作都会阻塞当前线程,直至操作完成,数据以流的形式逐字节/逐字符传输。2.答案:C解析:BufferedReader是字符缓冲输入流,专门用于高效读取文本文件;FileInputStream是字节输入流,用于读取所有类型文件;B选项拼写错误,无BufferedReader写法;FileOutputStream是输出流。3.答案:B解析:Buffer是数据容器,所有NIO数据读写必须通过缓冲区;Channel是数据传输通道;Selector是事件监听器,负责监听通道状态。4.答案:D解析:Buffer三大核心属性为capacity(容量)、limit(边界)、position(位置),无length属性,length是数组、字符串的属性。5.答案:B解析:NIO通道不能直接读写数据,所有数据必须通过Buffer缓冲区中转,这是NIO的核心特性之一。通道双向读写、支持异步、FileChannel用于文件操作均正确。6.答案:B解析:Selector(选择器)是NIO多路复用的核心,可同时注册多个通道,监听连接、读、写等就绪事件,单线程即可管理多个网络连接,大幅提升并发能力。7.答案:B解析:字节流(InputStream/OutputStream)处理字节数据,可适配图片、视频、文本等所有文件;字符流(Reader/Writer)经过编码解码,仅用于处理文本文件。字节流无默认缓冲区,字符缓冲流才有缓冲区。8.答案:B解析:flip()方法的核心是切换读写模式:写入数据后,调用flip()会将limit锁定为当前position,position重置为0,让缓冲区从写入状态切换为读取状态。9.答案:C解析:Selector的select()方法默认阻塞,直至有注册的通道触发就绪事件;NIO单线程可处理多连接,缓冲区读写非阻塞,通道读写默认非阻塞。10.答案:B二、填空题答案解析1.字节流、字符流、字符流解析:传统IO按数据处理单位分为字节流(处理所有文件)和字符流(仅处理文本文件)。2.Channel(通道)、Buffer(缓冲区)、Selector(选择器)解析:三者为NIO核心架构,分工明确:Buffer存数据、Channel传数据、Selector管事件。3.capacity、position、limit解析:capacity固定不变,代表缓冲区最大存储容量;position记录当前操作位置;limit限制可读写的最大下标。4.SocketChannel、ServerSocketChannel解析:ServerSocketChannel用于服务端监听连接,SocketChannel用于客户端和服务端数据传输。5.同步阻塞、同步非阻塞解析:BIO线程等待IO操作完成,全程阻塞;NIO线程不会阻塞,可轮询处理就绪的IO事件。三、简答题详细答案1.BIO和NIO核心区别及适用场景(1)核心区别:①阻塞模式:BIO是同步阻塞,线程执行IO操作时会被挂起,直至操作完成;NIO是同步非阻塞,线程发起IO请求后立即返回,不会阻塞,可处理其他任务。②数据模型:BIO面向流,数据逐字节传输,无缓存;NIO面向缓冲区,数据先存入缓冲区,再批量读写,效率更高。③并发能力:BIO单线程只能处理一个连接,高并发下需开启大量线程,资源消耗大;NIO通过Selector多路复用,单线程可管理成千上万个连接。(2)适用场景:①BIO:连接数量少、并发量低、业务简单的场景,如小型本地文件读写、低并发内网服务。②NIO:高并发、海量短连接、网络通信场景,如网关服务、聊天服务、分布式通信框架。2.Buffer三大核心方法作用及场景(1)flip():读写切换方法。写入数据后调用,将limit=position、position=0,锁定已写入的数据区域,用于写入完成后读取缓冲区数据。(2)clear():清空重置方法。将position=0、limit=capacity,数据并未真正删除,仅重置读写标记,用于读取完成后,重新写入新数据。(3)rewind():回溯重读方法。仅将position=0,limit保持不变,用于重复读取缓冲区已有数据,无需重新写入。3.NIOSelector工作原理Selector是NIO多路复用的核心,通过单线程轮询监听多个通道的IO事件,实现高并发处理,核心流程如下:1.创建Selector选择器实例,作为事件监听容器;2.将多个Channel通道注册到Selector,并指定需要监听的事件(连接就绪、读就绪、写就绪);3.调用select()方法阻塞监听,直至注册的通道中有事件就绪;4.获取就绪事件的通道集合,遍历处理对应的读写、连接事件;5.处理完成后继续轮询监听,循环执行。核心优势:无需为每个连接创建独立线程,单线程即可管理大量通道,极大减少线程创建、切换的资源开销,提升并发性能。四、编程题参考答案(完整可运行代码)java

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.nio.ByteBuffer;

importjava.nio.channels.FileChannel;

/**

*NIO实现文件复制

*核心:FileChannel+ByteBuffer缓冲区批量读写

*/

publicclassNIOFileCopy{

publicstaticvoidmain(String[]args){

//源文件、目标文件路径

FilesourceFile=newFile("D:/test/source.txt");

FiletargetFile=newFile("D:/test/target.txt");

//调用复制方法

copyFileByNIO(sourceFile,targetFile);

System.out.println("文件复制完成!");

}

/**

*NIO文件复制核心方法

*@paramsource源文件

*@paramtarget目标文件

*/

publicstaticvoidcopyFileByNIO(Filesource,Filetarget){

//非空判断、文件合法性校验

if(!source.exists()||!source.isFile()){

System.out.println("源文件不存在或不是有效文件!");

return;

}

//定义通道对象,用于最终关闭资源

try(FileInputStreamfis=newFileInputStream(source);

FileOutputStreamfos=newFileOutputStream(target);

FileChannelinChannel=fis.getChannel();

FileChanneloutChannel=fos.getChannel()){

//分配1024字节缓冲区

ByteBufferbuffer=ByteBuffer.allocate(1024);

//循环读取文件数据到缓冲区

while(inChannel.read(buffer)!=-1){

//切换为读取模式,读取缓冲区数据

buffer.flip();

//将缓冲区数据写入目标通道

outChannel.write(buffer);

//清空缓冲区,准备下一次写入

buffer.clear();

}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论