【问题标题】:FileDescriptor.in v/s System.inFileDescriptor.in 与 System.in
【发布时间】:2018-10-11 08:56:50
【问题描述】:

在 Java 中,我们可以使用 Scanner 类来获取输入,但它不如 IO Package 的 BufferedReader 高效。 在初始化 Scanner 类的对象或 BufferedReader 类的对象时,我们使用 InputStream "System.in"。 System.in 比 FileDescriptor.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 输出流:

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

将 FileDescriptor.out 与 BufferedWriter 一起使用:

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

【问题讨论】:

    标签: java io inputstream outputstream


    【解决方案1】:

    您的问题似乎是“与FileDescriptor.in 相比,System.in 好吗?”

    答案:

    1. 它们不同System.in 可以用System.setIn 更改,但FileDescriptor.in 总是指向同一个IO 源(在你运行程序时,除非你使用本机代码),所以如果你使用FileDescriptor.in,你的灵活性会降低。
    2. 使用 VM 启动时的默认设置,性能是相同的,如果您记住 System.in 是缓冲的,所以任何替代方案也需要缓冲。

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

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

    您从System.in 获得的标准流是从FileDescriptor.in 读取的FileInputStream,但出于性能原因,它周围有一个BufferedInputStream(它提高了小型读取的性能)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 2014-04-03
      相关资源
      最近更新 更多