精选Java IO面试题(转发)
前言
本文转发自精选Java IO面试题及参考答案,内容有所修改。
Java IO面试题汇总
- 什么是IO流?
它是一种数据的流从源头流到目的地。比如文件拷贝,输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。 - 字节流和字符流的区别?
字节流用于操作包含ASCII字符的文件。JAVA也支持其他的字符如Unicode,为了读取包含Unicode字符的文件,JAVA语言引入了字符流。ASCII作为Unicode的子集,对于英语字符的文件,可以使用字节流也可以使用字符流。 - Java中流类的超类(均为抽象类)主要由哪些组成?
1)java.io.InputStream
(字节输入流)
2)java.io.OutputStream
(字节输出流)
3)java.io.Reader
(字符输入流)
4)java.io.Writer
(字符输出流) - FileInputStream和FileOutputStream是什么?
1)这是在拷贝文件操作的时候,经常用到的两个类。
2)在处理小文件的时候,它们的性能表现还不错,在大文件的时候,最好使用BufferedInputStream
(或BufferedReader
)和BufferedOutputStream
(或BufferedWriter
) - 字节流和字符流,你更喜欢哪一个?
更喜欢使用字符流。许多在字符流中存在的特性,字节流中不存在。比如使用BufferedReader而不是BufferedInputStream或DataInputStream,它其中包含一个‘readLine()’方法用于读取文本行;又比如BufferedWriter流中有一个独特的向文件写入一个换行符的方法‘newLine()’用来读取下一行,但是在字节流中我们需要做额外的操作。 - System.out.println()是什么?
println是PrintStream的一个方法。out是一个静态PrintStream类型的成员变量,System是一个java.lang包中的类,用于和底层的操作系统进行交互。 - 什么是Filter流?
1)Filter Stream是一种IO流。
2)Filter流的主要作用是:对存在的流增加一些额外的功能,像给目标文件增加源文件中不存在的行数,或者增加拷贝的性能。 - 有哪些可用的Filter流?
1)在java.io包中主要由4个可用的filter Stream组成。两个字节filter stream,两个字符filter stream。分别是:FilterInputStream
、FilterOutputStream
、FilterReader
和FilterWriter
。 - 有哪些Filter流的子类?
1)LineNumberInputStream
:给目标文件增加行号。
2)DataInputStream
:有些特殊的方法如:readInt()、readDouble()和readLine()等可以一次性的读取一个int, double和一个string类型的数据。
3)BufferedInputStream
:增加性能。
4)PushbackInputStream
:推送要求的字节到系统中。 - SequenceInputStream的作用是什么?
使用很少的代码实现‘拷贝多个文件到一个目标文件’的目的。 - 说说PrintStream和PrintWriter的异同点?
他们两个的功能相同,但是属于不同的分类:字节流和字符流。他们都有println()方法。 - 在文件拷贝的时候,哪一种流可用于提升更多的性能?
1)在字节流的时候,使用BufferedInputStream和BufferedOutputStream。
2)在字符流的时候,使用BufferedReader和BufferedWriter。 - 说说管道流(Piped Stream)
1)有四种管道流:PipedInputStream
、PipedOutputStream
、PipedReader
和PipedWriter
。
2)在多个线程或进程中传递数据的时候管道流非常有用。 - 说说File类
1)它不属于IO流,也不是用于文件操作的。
2)它主要是用于获取一个文件的属性、读写权限、大小等信息。 - 说说RandomAccessFile?
1)它在java.io包中是一个特殊的类,既不是输入流也不是输出流,它两者都可以做到。
2)它是Object的直接子类。通常来说,一个流只有一个功能,要么读,要么写。但是RandomAccessFile类既可以读文件,也可以写文件。
3)DataInputStream和DataOutputStream有的方法,在RandomAccessFile中都存在。