[英]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.