Java IO 笔试真题及详细答案解析_第1页
Java IO 笔试真题及详细答案解析_第2页
Java IO 笔试真题及详细答案解析_第3页
Java IO 笔试真题及详细答案解析_第4页
Java IO 笔试真题及详细答案解析_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

JavaIO笔试真题及详细答案解析整套试题覆盖JavaIO核心知识点,包含基础概念、字节流/字符流、缓冲流、序列化、文件操作等高频考点,题型贴合企业真实笔试,答案附带原理解析,便于理解记忆。一、单项选择题(共10题)1.下列关于JavaIO流的说法,正确的是()A.字节流只能操作文本文件,字符流只能操作二进制文件B.InputStream、OutputStream是字符流的顶层父类C.Reader、Writer是字符流的顶层抽象父类D.所有IO流关闭后都不会抛出异常答案:C解析:字节流可操作所有类型文件(文本、图片、视频等),字符流仅用于操作文本文件,A错误;InputStream/OutputStream是字节流顶层父类,B错误;IO流关闭操作可能抛出IO异常,D错误;Reader/Writer为字符流顶层抽象父类,C正确。2.以下不属于节点流的是()A.FileReaderB.FileOutputStreamC.BufferedReaderD.FileInputStream答案:C解析:节点流直接对接数据源(文件、数组等),包含File系列、数组流等;处理流(包装流)基于节点流封装,BufferedReader是缓冲处理流,用于包装字符输入流,不属于节点流。3.Java中字符流读取数据的默认编码问题,下列说法正确的是()A.FileReader默认使用系统默认编码读取文件B.FileReader可以手动指定读取编码C.字符流不会出现乱码问题D.字节流读取文本文件一定会乱码答案:A解析:FileReader无指定编码的构造方法,默认采用操作系统默认编码读取文件,A正确;若需指定编码,需使用InputStreamReader包装字节流,B错误;编码不匹配时字符流同样会乱码,C错误;字节流读取纯英文文本不会乱码,D错误。4.实现Java对象序列化必须实现的接口是()A.CloneableB.SerializableC.ComparableD.Runnable答案:B解析:Serializable是序列化标记接口,无任何抽象方法,仅用于标识当前对象可被序列化;Cloneable用于对象克隆,Comparable用于对象比较,Runnable用于线程实现。5.关于transient关键字,说法错误的是()A.被transient修饰的成员变量不会被序列化B.transient可以修饰静态变量C.反序列化后,transient修饰的变量值为默认值D.transient仅作用于序列化过程答案:B解析:transient仅能修饰实例成员变量,不能修饰静态变量、方法和类;静态变量属于类,不属于对象本身,本身不会参与序列化。被transient修饰的实例变量,序列化时会被忽略,反序列化后赋值为数据类型默认值。6.下列缓冲流的默认缓冲区大小是()A.1024字节B.2048字节C.8192字节D.4096字节答案:C解析:Java中BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter默认缓冲区大小均为8192字节(8KB),可通过构造方法手动指定缓冲区大小。7.下列方法中,属于Reader类核心读取方法的是()A.read(byte[]b)B.read(intlen)C.read(char[]cbuf)D.write(char[]cbuf)答案:C解析:Reader是字符输入流,基于字符数组读取,核心方法为read(char[]cbuf);read(byte[]b)是字节输入流InputStream的方法;write系列为输出流方法。8.关于IO流关闭顺序,正确的是()A.先关闭节点流,再关闭处理流B.先关闭处理流,再关闭节点流C.无需区分顺序,随意关闭D.只需关闭节点流,处理流无需关闭答案:B解析:处理流包装节点流,关闭处理流时会自动关闭底层节点流。规范写法为先开后关,先创建的节点流后关闭,后创建的处理流先关闭。9.Java7新增的自动关闭流的语句是()A.try-catchB.try-finallyC.try-with-resourcesD.throw-throws答案:C解析:try-with-resources是JDK7新特性,所有实现AutoCloseable接口的流对象,均可在该语句中自动关闭,无需手动写finally关闭代码,简化IO流资源释放操作。10.下列不属于文件操作IO流的是()A.FileInputStreamB.FileWriterC.ByteArrayInputStreamD.FileReader答案:C解析:ByteArrayInputStream是数组字节流,数据源为内存字节数组,不属于文件操作流;其余均为针对文件的专用IO流。二、填空题(共5题)1.JavaIO流按照数据传输方向可分为________和________。答案:输入流、输出流2.JavaIO流按照数据处理单位可分为________和________。答案:字节流、字符流3.字节流的顶层父类是________、________,字符流的顶层父类是________、________。答案:InputStream、OutputStream、Reader、Writer4.反序列化时,需要调用________类的readObject()方法。答案:ObjectInputStream5.解决文本文件读取乱码问题,可使用________包装字节流,手动指定编码格式。答案:InputStreamReader三、简答题(共4题,高频面试考点)1.简述字节流和字符流的区别?答案解析:(1)处理单位不同:字节流以字节(8位)为单位读写数据;字符流以字符(16位)为单位读写数据,底层基于字节流+编码转换实现。(2)适用场景不同:字节流可操作所有文件类型(文本、图片、视频、音频等二进制文件);字符流仅适用于文本文件(txt、java、md等)。(3)缓冲区特性:字节流默认无缓冲区,直接读写磁盘;字符流自带缓冲区,需手动flush()或关闭流才会写入磁盘。(4)顶层父类不同:字节流为InputStream/OutputStream,字符流为Reader/Writer。2.简述节点流和处理流的区别与联系?答案解析:区别:(1)节点流:直接对接原始数据源(文件、内存数组、网络端口),是基础流,读写效率较低,无额外功能。(2)处理流:又称包装流,不直接对接数据源,用于包装节点流,基于装饰器模式实现,可提供缓冲、解析、序列化等增强功能,提升读写效率。联系:处理流必须依赖节点流存在,不能单独使用;关闭处理流会自动关闭底层包装的节点流,开发中优先使用处理流提升性能。3.什么是序列化和反序列化?使用场景是什么?答案解析:序列化:将Java内存中的对象数据,转换为字节序列的过程,核心目的是实现对象持久化存储或网络传输。反序列化:将字节序列还原为Java对象的过程,是序列化的逆操作。使用场景:(1)对象持久化:将对象保存到本地文件、数据库;(2)网络传输:分布式系统中跨服务传输对象数据;(3)缓存存储:Redis、缓存框架存储Java对象。注意:序列化对象必须实现Serializable接口,transient修饰的变量不参与序列化。4.为什么IO流操作必须关闭资源?try-with-resources的优势是什么?答案解析:必须关闭的原因:IO流属于操作系统资源,JVM不会自动回收文件句柄、网络端口等系统资源,若不手动关闭,会造成资源泄漏,占用系统文件句柄,导致程序卡顿、崩溃。try-with-resources优势:(1)自动关闭资源,无需手动编写finally关闭代码,简化代码;(2)避免finally代码块异常导致资源关闭失败的问题;(3)所有实现AutoCloseable接口的资源均可使用,通用性强。四、编程题(2道笔试高频真题)1.编写代码,实现文本文件复制(使用字符缓冲流,解决乱码问题)参考答案:java

importjava.io.BufferedReader;

importjava.io.BufferedWriter;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

importjava.io.IOException;

/**

*文本文件复制,指定UTF-8编码,避免乱码

*/

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();

}

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

}catch(IOExceptione){

e.printStackTrace();

}

}

}

核心解析:通过InputStreamReader/OutputStreamWriter手动指定编码,彻底解决乱码;使用缓冲流按行读写,提升大文件读写效率;try-with-resources自动释放资源。2.编写代码,实现Java对象的序列化与反序列化参考答案:java

importjava.io.Serializable;

importjava.io.FileOutputStream;

importjava.io.FileInputStream;

importjava.io.ObjectOutputStream;

importjava.io.ObjectInputStream;

importjava.io.IOException;

//实体类实现序列化接口

classUserimplementsSerializable{

//序列化版本号,避免版本不一致反序列化失败

privatestaticfinallongserialVersionUID=1L;

privateStringusername;

privateintage;

//transient修饰,不参与序列化

privatetransientStringpassword;

publicUser(Stringusername,intage,Stringpassword){

this.username=username;

this.age=age;

this.password=password;

}

@Override

publicStringtoString(){

return"User{"+

"username='"+username+'\''+

",age="+age+

",password='"+password+'\''+

'}';

}

}

publicclassSerializeDemo{

publicstaticvoidmain(String[]args){

//1.序列化:对象写入文件

try(ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("D:/user.obj"))){

Useruser=newUser("张三",20,"123456");

oos.writeObject(user);

System.out.println("对象序列化成功");

}catch(IOExceptione){

e.printStackTrace();

}

//2.反序列化:文件读取为对象

try(ObjectInputStreamois=newObjectInputStream(newFileInputStream("D:

温馨提示

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

最新文档

评论

0/150

提交评论