当前位置: 首页 > 知识库问答 >
问题:

FileDescriptor.in V/S System.in

郑旭
2023-03-14

在Java,我们可以使用Scanner类来获取输入,但它的效率不如IO包的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个答案

顾乐心
2023-03-14

看起来您的问题是“System.InFileDescriptor.In相比好吗?”

答案:

  1. 他们不一样。System.In可以使用System.Setin更改,但FileDescriptor.In始终指向相同的IO源(在运行程序时,除非使用本机代码),因此如果使用FileDescriptor.In.
  2. 则灵活性较低
  3. 如果使用默认设置,当VM启动时,性能是相同的,如果您记住system.in是缓冲的,因此任何替代方案也需要缓冲。

第2点的证明在system类中的源代码中:

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

System.In获得的标准流是一个从FileInputStream读取的FileDescriptor.In文件,但由于性能原因,它周围包装了一个BufferedInputStream(它提高了小读的性能)。

 类似资料:

相关问答

相关文章

相关阅读