FileDescriptor.in v / s System.in

时间:2018-05-01 09:51:38

标签: java io inputstream outputstream

在Java中,我们可以使用Scanner类来获取输入,但它不如IO Package的BufferedReader高效。 在初始化Scanner类的对象或BufferedReader类的对象时,我们使用InputStream“System.in”。 与FileDescriptor.in相比,System.in是否良好?

就像我将System.in与BufferedReader一起使用:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

使用FileDescriptor.in:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(FileDescriptor.in), "ASCII"));

打印时也一样:

使用System.out OutputStream:

System.out.println("Hello World!");

将FileDescriptor.out与BufferedWriter一起使用:

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FileDescriptor.out),"ASCII"), 512);

1 个答案:

答案 0 :(得分:1)

System.in相比,您的问题似乎FileDescriptor.in是否合适?”

数目:

  1. 他们不同。可以使用System.in更改System.setIn,但FileDescriptor.in始终指向相同的IO源(当您运行程序时,除非您使用本机代码),因此如果使用本机代码则不太灵活你使用FileDescriptor.in
  2. 使用VM启动时的默认设置,性能是相同的,如果您记住System.in已缓冲,那么任何替代方案也需要缓冲。
  3. 第2点的证明在System类的源代码中:

        FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
        // ...
        setIn0(new BufferedInputStream(fdIn));
    

    您从System.in获得的标准流是从FileInputStream读取的FileDescriptor.in,但出于性能原因,其中包含BufferedInputStream(它改进了小读数的表现。)