在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);
看起来您的问题是“System.In
与FileDescriptor.In
相比好吗?”
答案:
System.In
可以使用System.Setin
更改,但FileDescriptor.In
始终指向相同的IO源(在运行程序时,除非使用本机代码),因此如果使用FileDescriptor.In
.system.in
是缓冲的,因此任何替代方案也需要缓冲。第2点的证明在system
类中的源代码中:
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
// ...
setIn0(new BufferedInputStream(fdIn));
从System.In
获得的标准流是一个从FileInputStream
读取的FileDescriptor.In
文件,但由于性能原因,它周围包装了一个BufferedInputStream
(它提高了小读的性能)。