前言


Java IO面试题汇总

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

附:Java IO运行机制图解

IO流 Java io流java面试题_java

附:Java IO中字节流模块的树形分支图

IO流 Java io流java面试题_字节流_02