繁体   English   中英

JAVA Scanner类在内部如何工作?

[英]How does the JAVA Scanner class work internally?

在JAVA中,当您导入Scanner类并创建Scanner对象时,底层逻辑如何工作以捕获输入并将其写入内存? 我了解以下声明

Scanner sc = new Scanner (System.in) 

表示您正在创建一个名为sc的新Scanner类对象,该对象将继承要以某种方式使用的Scanner类的属性和方法。 但是我想知道System.in参数有什么作用?

当编译器执行类实例化步骤时,它将首先创建一个类构造函数,该类构造函数将System.in作为参数,它是InputStream类的对象。 这意味着,当您调用Scanner类的nextInt()nextln()方法时,您实际上要做的是将该输入发送到该方法中,该方法将对该方法执行一些语法检查,然后将其传递到InputStream类,该方法将将其转换为字节,然后可以将其写入内存。

那是怎么回事? 还是我完全脱离了这个轨道?

扫描程序类可用于读取来自不同来源的输入。 扫描程序对象保存System类中存在的InputStream对象的地址。 系统类的Input Stream对象从键盘读取字节流/字节形式的数据。 Scanner类将读取的字节转换为特定的数据类型。 Scanner类是在Java5.0中引入的,直到那时BufferedReader才是读取数据的首选方式,该方式将数据读取为字符串。 例如:

Scanner scan=new Scanner(System.in);

在这一行中,scan是Scanner类的一个对象,此对象保存Input Stream对象的地址。 当从键盘读取一个字节的数据时,输入流对象将保存键盘的地址( 每个设备在OS中都被设置为字节/块特殊文件或字符特殊文件,因此设备的地址本质上是内存中的块/字符特殊文件的起始地址 )将该数据传输到Scanner类对象,可以对其进行操作以将其读取为特定的数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM