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-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。