Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.in属于哪个输入类?为什么?_Java_Inheritance_Io - Fatal编程技术网

Java System.in属于哪个输入类?为什么?

Java System.in属于哪个输入类?为什么?,java,inheritance,io,Java,Inheritance,Io,代码 import java.io.*; class ioTest1{ public static void main(String args[]){ System.out.println(System.in.getClass()); } } 返回属于BufferedInputStream类的System.in。为什么呢 由于classSystem定义了System.in为InputStream,我可以看出结果并非不可能。但是为什么前面的代码不能返回另一个继承自Inp

代码

import java.io.*;

class ioTest1{
   public static void main(String args[]){
      System.out.println(System.in.getClass());
   }
}

返回属于
BufferedInputStream
类的
System.in
。为什么呢


由于class
System
定义了
System.in
InputStream
,我可以看出结果并非不可能。但是为什么前面的代码不能返回另一个继承自
InputStream
的类,比如
DataInputStream

正如注释中所解释的那样,没有任何东西可以阻止
系统。在
中成为
DataInputStream
,但是考虑到
BufferedInputStream
是一个包含数据缓冲的简单的
InputStream
(这总是一个好主意),因此给出可能的最通用类型更有意义

然后,开发人员可以使用
DataInputStream
包装缓冲流(如果程序是通过管道传输的二进制数据),或者如果程序从用户接收文本数据,则使用
InputStreamReader


System.in
是一个
BufferedInputStream
,因为它不需要其他任何东西。

简单的答案是它就是如何实现的

如果您查看java.lang.System类的源代码,您将看到System.in已设置好(请参阅java\u java\u lang\u System\u setIn0)


不同的JVM实现者可以使用他们喜欢的任何InputStream实现。在您的例子中,使用
BufferedInputStream
大概是为了提高效率。

如果编写类的人决定选择另一个实现,它可以返回扩展
InputStream
类的其他内容。
BufferedInputStream
InputStream
的子类
getClass()
可以返回
InputStream
的任何子类,但它返回
BufferedInputStream
的原因是因为这正是它的实现方式——也就是说,在某个地方,您会找到一行,它大致表示
System.in=new BufferedInputStream()
(而不是其他类型的流)。你是在问开发人员为什么选择这种类型的流吗?如果这是代表开发人员实现的问题,那么这就回答了我的问题。但是我试图理解I/O在Java中是如何工作的,我认为有这样一个指定的类实例化通用的标准输入流是很奇怪的…@ThemistoklisHaris因为
InputStream
是抽象的,它必须是其中的一个子类
BufferedInputStream
是一个非常合适且显而易见的选择。@Kayaman为什么
BufferedInputStream
比其他类型的
InputStream
更好?(这将是对这个问题的一个很好的回答;)