当前位置: 首页 > article >正文

Java全栈经典面试题剖析6】JavaSE高级 -- 文件、IO流、序列化

目录

面试题3.29  怎么获取指定路径下的全部文件

面试题3.30  什么是IO流

面试题3.31  字节流与字符流的区别

面试题3.32  什么是缓冲区

面试题3.33  java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

面试题3.34  字节流有哪些? 缓冲流的加速方式

面试题3.35  什么是java序列化,如何实现java序列化?

面试题3.36  Java序列化中如果有些字段不想进行序列化,怎么办?


面试题3.29  怎么获取指定路径下的全部文件

【技术难度:1     出现频率:1  】

1.使用File对象的list()方法可以获取目录中文件的文件名;

2.使用File对象的listFiles()方法可以获取目录中文件的文件对象。

扩展(无需背诵):

File f = new File(path);  //根据路径创建File对象

String[] fileName = f.list();  //获取目录下的文件名

File[] files = f.listFiles();  //获取目录下的文件对象

面试题3.30  什么是IO流

【技术难度:   1  出现频率: 1 】

1.IO流分为输入流InputStream和输出流OutputStream;

2.输入流和输出流又分为字节流和字符流;

3.字符流的底层也为字节流;

4.操作文件的时候使用字节流,操作字符的时候使用字符流。

面试题3.31  字节流与字符流的区别

【技术难度:  1   出现频率:1  】

1.字节流以字节为单位进行操作,是万能的流,可以读写各种格式文件,比如图片视频等;

2.字符流底层是字节流,以字符为单位进行操作,用于操作文本文件。

面试题3.32  什么是缓冲区

【技术难度:2     出现频率:1  】

缓冲区分为输入缓冲区和输出缓冲区:

1.输入缓冲区,一次性从磁盘中读取足够大的数据到缓冲区内存中,程序后续每次从缓冲区内存中读取一定量的数据,用于减少读取磁盘次数;

2.输出缓冲区,每次把数据写到缓冲区内存中,当缓冲区内存数据达到一定量的时候,一次性写入磁盘,用于减少写入磁盘的的次数。

面试题3.33  java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

【技术难度:  2   出现频率:1  】

Java中有字节流和字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

面试题3.34  字节流有哪些? 缓冲流的加速方式

【技术难度: 2    出现频率:1  】

1.

InputStream

FileInputStream

BufferedInputStream

ObjectInputStream

OutputStream

FileOutputStream

BufferedOutputStream

ObjectOutputStream

2.

缓冲流内置了默认8KB大小的数组作为缓冲区

面试题3.35  什么是java序列化,如何实现java序列化?

【技术难度: 2    出现频率: 1 】

第一层:

通俗的说,序列化就是将内存中java对象写到硬盘上的过程,反序列化是将硬盘中的数据,反向读取到程序内存中重新构建对象。序列化需要实现Serializable接口,此接口中没有方法,只是个标示接口。

第二层:

反序列化会比较数据和.class文件的版本号(serialVersionUID),如果修改过代码导致版本号与数据中的不一致,将无法反序列化,会抛出InvalidClassException异常。

第三层:

transient和static修饰的属性无法被序列化
反序列化不会调用构造方法。克隆和序列化的底层走的不是构造

面试题3.36  Java序列化中如果有些字段不想进行序列化,怎么办?

【技术难度:  2   出现频率:1  】

第一层:

1.使用 transient 关键字修饰变量,它只能修饰变量,它修饰的的变量不参与序列化,当对象被反序列化时,被它修饰的变量值会是堆中的默认值(0,0.0,null等);

2.使用static修饰,序列化保存的是对象的状态,而static修饰的字段属于类,与对象无关;

第二层:

3.Externalizable,他是Serializable接口的子类,可以使用这个接口的writeExternal()和readExternal()方法可以指定序列化哪些属性。


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。


http://www.kler.cn/news/361129.html

相关文章:

  • 【计算机网络】详解数据链路层数据帧Mac地址ARP协议
  • Jetpack架构组件_LiveData组件
  • 【贪心算法】(第八篇)
  • kali——strings的使用
  • 安利一款基于canvas/svg的富文本编辑器-支持在导出PDF、DOCX
  • 华为三层交换来实现不同vlan通信问题
  • Redis-04 Redis管道
  • Flink任务报错akka size oversized
  • 基于 Hugo 的静态响应式网址导航主题
  • sh与bash的区别
  • Linux 防火墙的开启、关闭、禁用命令
  • SpringMVC 中的常用注解和用法
  • 探索Web3生态系统:社区、协议与参与者的角色
  • 详解ip route
  • SpringBoot民宿预订系统:打造在线住宿新体验
  • 软件设计模式------简单工厂模式
  • vue 页面导出gif图片 img 导出gif 超简单~
  • Linux 进程终止和进程等待
  • 基于Java+springboot的流浪天使乐园管理系统
  • mlir learn