版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaIO面试真题(含答案)说明:本套题目贴合一线Java面试高频考点,涵盖IO基础、流分类、BIO/NIO、字符字节流、资源关闭、底层原理等核心内容,适合初级、中级Java开发面试刷题,无冗余套话,贴近真实面试提问方式。一、基础概念题(入门高频)1、请说说JavaIO中字节流和字符流的区别?各自适用什么场景?参考答案:1)处理单位不同:字节流以字节(byte)为单位,字符流以字符为单位,会自动适配编码;2)处理对象不同:字节流可以处理所有类型文件(文本、图片、视频、压缩包等),字符流仅专门处理文本文件;3)缓冲区不同:字节流默认无缓冲,直接读写磁盘/网络,字符流自带缓冲区,效率更高;4)后缀区分:字节流核心基类是InputStream、OutputStream;字符流核心基类是Reader、Writer。适用场景:读写非文本文件一律用字节流;读写txt、java、xml等文本文件,优先用字符流。2、JavaIO中节点流和处理流有什么区别?举几个常用例子参考答案:节点流:直接对接数据源(文件、数组、管道)的基础流,是真正负责底层读写的流,无封装增强。常用:FileReader、FileWriter、FileInputStream、FileOutputStream。处理流:也叫包装流,基于节点流封装,不直接对接数据源,用于增强读写功能、提升效率。常用:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream、ObjectOutputStream。核心特点:处理流依赖节点流,关闭流时只需关闭外层处理流,内层节点流会自动关闭。3、为什么字符流读写文件必须刷新/关闭流?不关闭会有什么问题?参考答案:字符流自带内置缓冲区,写入数据时会先存入缓冲区,不会直接写入磁盘。如果不调用flush()刷新或close()关闭流,缓冲区残留的数据会丢失,无法落地到文件。不关闭流的问题:1)数据丢失、文件内容不完整;2)造成IO资源泄露,大量未关闭流会占用文件句柄,导致程序卡顿、报错、服务宕机;3)磁盘文件可能被持续占用,无法修改、删除。二、核心辨析题(面试重点)4、Buffered缓冲流为什么能提升IO读写效率?参考答案:普通节点流每次读写都会直接操作磁盘/网络,磁盘IO、系统调用开销极大。缓冲流在内存中开辟了一块缓冲数组,读写数据时会批量操作:一次性读取大量数据存入缓冲区,程序从内存缓冲区读取数据;写入时先存入缓冲区,攒够批量数据后一次性写入磁盘。大幅减少了频繁的系统调用和磁盘操作次数,极大降低IO开销,从而提升整体读写性能。日常开发中,文件读写基本都会搭配缓冲流使用。5、说说InputStreamReader和OutputStreamWriter的作用参考答案:这两个是字节流转字符流的转换流,属于字符流体系的顶层转换工具,也是处理文本编码乱码问题的核心类。InputStreamReader:将字节输入流转为字符输入流,读取字节数据并按照指定编码解码为字符;OutputStreamWriter:将字节输出流转为字符输出流,将字符按照指定编码编码为字节输出。核心用途:解决文本读写乱码,可手动指定编码格式(UTF-8、GBK等),弥补FileReader/FileWriter无法自定义编码的缺陷。6、Java序列化的作用是什么?transient关键字有什么用?参考答案:序列化:将Java对象转为二进制字节序列,可用于文件持久化、网络传输、缓存存储;反序列化则是将二进制字节序列还原为Java对象。核心实现类:ObjectOutputStream、ObjectInputStream,实体类需实现Serializable空接口。transient:修饰成员变量,序列化时该变量会被忽略,不会参与序列化和持久化。常用于修饰敏感数据(密码)、临时变量、无需传输的字段。注意:被transient修饰的变量,反序列化后会恢复默认值(对象null、基本数据类型0/false)。三、BIO&NIO高频面试题(进阶必考)7、简单说说BIO、NIO的核心区别?适用场景分别是什么?参考答案:1)BIO(同步阻塞IO):传统IO,流是单向的、阻塞式。客户端发起请求后,线程会一直阻塞等待IO完成,期间无法处理其他任务。一个连接对应一个线程,并发量高时线程堆积、资源耗尽。适用场景:并发量小、业务简单的小型项目、本地文件IO操作。2)NIO(同步非阻塞IO):JDK1.4推出,核心组件Buffer、Channel、Selector。通道双向读写、非阻塞,线程不会被IO阻塞,可通过选择器监听多个通道,单线程可管理大量连接。适用场景:高并发、长连接、网络通信场景,如服务器、网关、即时通讯服务。8、NIO中Buffer、Channel、Selector各自的作用?参考答案:Channel(通道):NIO读写的载体,双向可读可写,对接文件、网络端口,替代BIO的流,支持非阻塞操作;Buffer(缓冲区):数据读写的容器,所有NIO数据都先存入Buffer再读写,底层是数组,支持位置切换、重复读写;Selector(选择器):NIO多路复用核心,单线程监听多个通道的IO事件(连接、可读、可写),只处理就绪的通道,避免线程无效阻塞,实现高并发。9、NIO的三大核心属性position、limit、capacity分别代表什么?参考答案:capacity:缓冲区总容量,初始化后固定不变,代表最大存储数据量;position:当前读写位置,读写数据时会自动向后移动;limit:读写上限,限制position的最大取值。写模式下limit等于capacity,读模式下limit等于已写入数据的长度。四、实操踩坑题(面试加分项)10、文件读写出现乱码的常见原因和解决方案?参考答案:常见原因:1)读写编码不一致(如写入GBK、读取UTF-8);2)使用FileReader/FileWriter,默认跟随系统编码,跨平台出现乱码;3)文件本身编码与程序读取编码不匹配。解决方案:统一使用转换流InputStreamReader/OutputStreamWriter,手动指定UTF-8编码,全程编码统一,从根源避免乱码。11、IO流关闭的正确顺序是什么?try-with-resources的优势?参考答案:关闭顺序:先关外层处理流,再关内层节点流(实际开发中只需关闭外层流即可)。try-with-resources是JDK7新增特性,所有实现AutoCloseable接口的IO流都可使用。优势:1)无需手动写close(),程序结束后自动关闭流;2)避免手动关闭遗漏、异常导致流未关闭的问题;3)代码简洁,彻底解决IO资源泄露问题,是目前企业开发标准写法。12、能不能说说IO异常处理的常见误区?参考答案:1)流关闭写在try代码块中,出现异常时关闭代码不执行,造成资源泄露;2)多个流关闭时,一个流关闭报错,导致后续流无法关闭;3)字符流读写完成不flush,导致数据丢失;4)使用默认编码读写文本,跨环境乱码;5)序列化对象新增字段后,未指定serialVersionUID,反序列化报错。五、手写代码面试题(真题高频)13、用缓冲流实现文本文件复制(UTF-8编码,try-with-resources写法)参考答案:java
publicclassFileCopyDemo{
publicstaticvoidmain(String[]args){
//源文件、目标文件路径
StringsrcPath="D:/test.txt";
StringdestPath="D:/test_copy.txt";
//try-with-resources自动关闭流
try(BufferedReaderbr=newBufferedReader(
newInputStreamReader(newFileInputStream(srcPath),"UTF-8"));
BufferedWriterbw=newBufferedWriter(
newOutputStreamWriter(newFileOutputStream(destPath),"UTF-8"))){
Stringline;
//按行读取、写入
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();//换行
}
bw.flush();
}catch(IOExceptione){
e.printStackTrace();
}
}
}14、简述序列化版本号serialVersionUI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省仙居县2027届数学八上期末监测试题含解析
- 2026年浙江省杭州市第一中学八年级物理第6章光学综合测试卷及答案
- 2026年北师大版高中化学选择性必修第一册元素周期律知识巩固习题及答案
- 2026年人教版初中英语第9单元语法练习题及答案
- 2026秋小学体育北京版(新教材)一年级全一册每课教学设计含目录
- 2026中国医疗AI技术商业化进程与投资机会研究
- 儿童阑尾炎护理查房
- 小儿癫痫持续状态护理查房
- 2026中国植物基蛋白市场教育阶段与渠道建设策略
- 2026中医药现代研发制造业市场产品分析投资项目范围研究报告
- 森林康养师安全培训测试考核试卷含答案
- 小学三年级道德与法治 同学相伴第一课时教学设计
- 2026广东佛山市南海区狮山镇村(社区)招聘60人笔试参考题库及答案解析
- 融资融券考试题库(含答案)
- 第三单元第1课时 用字母表示数量关系(教学设计)数学北师大版六年级上册(新教材)
- 【新教材】统编版(2026)九年级上册道德与法治全册教案
- 高考数学考点题型全归纳
- 儿童前庭功能障碍康复治疗指南(2024)课件
- 2025年山东省检察院员额检察官遴选考试真题及答案
- (2026)十八项医疗质量安全核心制度
- 2025年广西交通运输厅所属事业单位考试真题(附答案)
评论
0/150
提交评论