FileDescriptor.in v/s System.in
FileDescriptor.in v/s System.in
在Java中,我们可以使用Scanner class获取输入,但它不如IO Package的BufferedReader高效。
在初始化 Scanner class 的对象或 BufferedReader class 的对象时,我们使用 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);
看来你的问题是"Is System.in
good as compared to FileDescriptor.in
?"
答案:
- 它们不同。
System.in
可以用 System.setIn
改变,但是 FileDescriptor.in
总是指向相同的 IO 源(当你是 运行 程序时,除非你使用本机代码),所以你'如果您使用 FileDescriptor.in
. 则灵活性会降低
- 使用 VM 启动时的默认设置,性能是相同的,如果您记住
System.in
是缓冲的,那么任何替代方案也需要缓冲。
第2点的证明在System
class:
中的源代码中
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
// ...
setIn0(new BufferedInputStream(fdIn));
您从 System.in
获得的标准流是从 FileDescriptor.in
读取的 FileInputStream
,但出于性能原因,它周围环绕着一个 BufferedInputStream
(它提高了小读取的性能)。
在Java中,我们可以使用Scanner class获取输入,但它不如IO Package的BufferedReader高效。 在初始化 Scanner class 的对象或 BufferedReader class 的对象时,我们使用 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);
看来你的问题是"Is System.in
good as compared to FileDescriptor.in
?"
答案:
- 它们不同。
System.in
可以用System.setIn
改变,但是FileDescriptor.in
总是指向相同的 IO 源(当你是 运行 程序时,除非你使用本机代码),所以你'如果您使用FileDescriptor.in
. 则灵活性会降低
- 使用 VM 启动时的默认设置,性能是相同的,如果您记住
System.in
是缓冲的,那么任何替代方案也需要缓冲。
第2点的证明在System
class:
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
// ...
setIn0(new BufferedInputStream(fdIn));
您从 System.in
获得的标准流是从 FileDescriptor.in
读取的 FileInputStream
,但出于性能原因,它周围环绕着一个 BufferedInputStream
(它提高了小读取的性能)。