代码
import java.io.*;
class ioTest1{
public static void main(String args[]){
System.out.println(System.in.getClass());
}
}
返回System.in
属于BufferedInputStream
类。那是为什么?
由于课程System
将System.in
定义为InputStream
,我可以看到结果并非不可能。但为什么以前的代码不能返回从InputStream
继承的另一个类,例如DataInputStream
?
答案 0 :(得分:12)
正如评论中所解释的那样,没有什么可以阻止System.in
成为DataInputStream
,但鉴于BufferedInputStream
是一个简洁的InputStream
,包括缓冲数据(总是一个好主意),给出最通用的类型更有意义。
如果程序使用管道二进制数据,开发人员可以使用例如DataInputStream
来包装缓冲流,如果程序正在从用户接收文本数据,则可以使用InputStreamReader
。
System.in
是BufferedInputStream
,因为它不需要任何其他内容。
答案 1 :(得分:4)
简单的答案就是它的实施方式。
如果查看java.lang.System类的源代码,您将看到System.in设置为natively(请参阅Java_java_lang_System_setIn0)。
不同的JVM实现者可以使用他们喜欢的任何InputStream实现。在您的情况下,大概使用BufferedInputStream
来提高效率。