首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileDescriptor.in v/s System.in

FileDescriptor.in v/s System.in
EN

Stack Overflow用户
提问于 2018-05-01 09:51:38
回答 1查看 300关注 0票数 1

在Java中,我们可以使用Scanner类获取输入,但是它不如IO包的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 OutputStream:

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

将FileDescriptor.out与BufferedWriter结合使用:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-01 10:07:40

看来你的问题是:“与System.in FileDescriptor.in**?"**相比,好吗?

答案:

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

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

代码语言:javascript
复制
    FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
    // ...
    setIn0(new BufferedInputStream(fdIn));

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50114471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档