Java I/O面试题

作者: AI贺贺 | 来源:发表于2018-03-06 21:16 被阅读29次

Java IO是面试中常问到的问题.


参考图 输入输出流关系图
  1. 什么是IO流?
    它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流都包括了。输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。

  2. 字节流和字符流的区别。
    字节流在JDK1.0中就被引进了,用于操作包含ASCII字符的文件。JAVA也支持其他的字符如Unicode,为了读取包含Unicode字符的文件,JAVA语言设计者在JDK1.1中引入了字符流。ASCII作为Unicode的子集,对于英语字符的文件,可以可以使用字节流也可以使用字符流。

  3. Java中流类的超类主要由那些?

  • java.io.InputStream
  • java.io.OutputStream
  • java.io.Reader
  • java.io.Writer
  1. FileInputStream和FileOutputStream是什么?
    这是在拷贝文件操作的时候,经常用到的两个类。在处理小文件的时候,它们性能表现还不错,在大文件的时候,最好使用BufferedInputStream (或 BufferedReader) 和 BufferedOutputStream (或 BufferedWriter)

案例:

public class InputAndOutputBuffering
{
  public static void main(String args[]) throws IOException
  {                     
    
    FileInputStream fistream = new FileInputStream("pqr.txt");     BufferedInputStream bistream = new BufferedInputStream(fistream); 

    FileOutputStream fostream = new FileOutputStream("xyz.txt"); 
    BufferedOutputStream bostream = new BufferedOutputStream(fostream);  
  
    int temp;
    while( ( temp = bistream.read() ) != -1 )
    {
      bostream.write(temp);     
      System.out.print((char) temp);    
    }
    bostream.close();  fostream.close();
    bistream.close();   fistream.close();
  }
}
  1. 字节流和字符流,你更喜欢使用拿一个?
    个人来说,更喜欢使用字符流,因为他们更新一些。许多在字符流中存在的特性,字节流中不存在。比如使用BufferedReader而不是BufferedInputStreams或DataInputStream,使用newLine()方法来读取下一行,但是在字节流中我们需要做额外的操作。

  2. System.out.println()是什么?
    println是PrintStream的一个方法。out是一个静态PrintStream类型的成员变量,System是一个java.lang包中的类,用于和底层的操作系统进行交互。

  3. 什么是Filter流?
    Filter Stream是一种IO流主要作用是用来对存在的流增加一些额外的功能,像给目标文件增加源文件中不存在的行数,或者增加拷贝的性能。

  4. 有哪些可用的Filter流?
    在java.io包中主要由4个可用的filter Stream。两个字节filter stream,两个字符filter stream. 分别是FilterInputStream, FilterOutputStream, FilterReader and FilterWriter.这些类是抽象类,不能被实例化的。

有些Filter流的子类。

  • LineNumberInputStream 给目标文件增加行号
  • DataInputStream 有些特殊的方法如readInt(), readDouble()readLine() 等可以读取一个 int, double和一个string一次性的,
  • BufferedInputStream 增加性能
  • PushbackInputStream 推送要求的字节到系统中
  1. SequenceInputStream的作用?
    在拷贝多个文件到一个目标文件的时候是非常有用的。可用使用很少的代码实现

案例:

public class TwoFiles {
    public static void main(String args[]) throws IOException
    {
        FileInputStream fistream1 = new FileInputStream("/Users/aihe/Desktop/Songshu/code/java8source/src/main/resources/A.txt");  // first source file
        FileInputStream fistream2 = new FileInputStream("/Users/aihe/Desktop/Songshu/code/java8source/src/main/resources/B.txt");  //second source file

        SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
        FileOutputStream fostream = new FileOutputStream("C.txt");        // destination file

        int temp;
        while( ( temp = sistream.read() ) != -1)
        {
            System.out.print( (char) temp ); // to print at DOS prompt
            fostream.write(temp);   // to write to file
        }
        fostream.close();
        sistream.close();
        fistream1.close();
        fistream2.close();
    }
}
  1. 说说PrintStream和PrintWriter
    他们两个的功能相同,但是属于不同的分类。字节流和字符流。他们都有println()方法。

  2. 在文件拷贝的时候,那一种流可用提升更多的性能?
    在字节流的时候,使用BufferedInputStream和BufferedOutputStream。
    在字符流的时候,使用BufferedReader 和 BufferedWriter

  3. 说说管道流(Piped Stream)
    有四种管道流, PipedInputStream, PipedOutputStream, PipedReader 和 PipedWriter.在多个线程或进程中传递数据的时候管道流非常有用。

  4. 说说File类
    它不属于 IO流,也不是用于文件操作的,它主要用于知道一个文件的属性,读写权限,大小等信息。

  5. 说说RandomAccessFile?
    它在java.io包中是一个特殊的类,既不是输入流也不是输出流,它两者都可以做到。他是Object的直接子类。通常来说,一个流只有一个功能,要么读,要么写。但是RandomAccessFile既可以读文件,也可以写文件。 DataInputStream 和 DataOutStream有的方法,在RandomAccessFile中都存在。

最后

这篇文章是我从国外翻译的,看完之后觉得对Java IO理解的更多了一些,翻译过来分享给大家。

附录

相关文章

  • Java I/O面试题

    Java IO是面试中常问到的问题. 什么是IO流?它是一种数据的流从源头流到目的地。比如文件拷贝,输入流和输出流...

  • 线上学习资料汇总_新

    1. Java I/O 这些年一直记不住的 Java I/O 深入分析 Java I/O 的工作机制 NIO 入门...

  • NIO.2-简介

    More New I/O Java 7 中的 More New I/O APIs,通过在 java.nio.cha...

  • Java & Groovy & Scala & Kotlin -

    Overview 文章介绍的 I/O 主要用于本地文件读写,不涉及网络 I/O。 Java 篇 Java 中的 I...

  • I/O

    Java I/O 总结 理解Java中字符流与字节流的区别 深入学习 Java 序列化 Java I/O 操作及优...

  • 知识总结:I/O模型基础

    I/O基础 1、java1.4之前,java对I/O支持不完善,存在以下问题: 没有数据缓冲区,I/O性能存在问题...

  • Netty 权威指南笔记(一):网络 I/O 模型和 Java

    Netty 权威指南笔记(一):网络 I/O 模型和 Java IO 入门 Java I/O 模型的实现离不开底层...

  • Java I/O

    Java I/O主要包括三个部分1.流式部分2.非流式部分3.其他类 1.字符流 字符流处理文本数据,在java中...

  • java I/O

    一.文件/文件夹File 二.InputStream/OutputStream字节输入输出流 三.关闭流的方式 四...

  • Java I/O

    如果当初陪着你的人走远了,那些日子回忆起来会模糊吗? mark 标记reset 重置exist 存在modifie...

网友评论

    本文标题:Java I/O面试题

    本文链接:https://www.haomeiwen.com/subject/ivorfftx.html