在 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 输出流:
System.out.println("Hello World!");
将 FileDescriptor.out 与 BufferedWriter 结合使用:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(FileDescriptor.out),"ASCII"), 512);
最佳答案
看起来您的问题是“与FileDescriptor.in
相比,System.in
好吗?”
答案:
- 它们不同。
System.in
可以用System.setIn
改变,但是FileDescriptor.in
总是指向相同的 IO 源(当你运行程序时,除非您使用 native 代码),因此如果您使用FileDescriptor.in
,您的灵 active 会降低。 - 使用 VM 启动时的默认设置,性能是相同的,如果您记住
System.in
是缓冲的,那么任何替代方案也需要缓冲。
第2点的证明在System
类的源代码中:
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
// ...
setIn0(new BufferedInputStream(fdIn));
您从 System.in
获得的标准流是一个从 FileDescriptor.in
读取的 FileInputStream
,但是有一个 BufferedInputStream
出于性能原因将其包裹起来(它提高了小读取的性能)。
关于java - FileDescriptor.in 与 System.in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50114471/