2016-12-17 6 views
0

В JAVA, когда вы импортируете класс Scanner и создаете объект Scanner, как работает базовая логика для захвата ввода и записи в память? Я понимаю, что следующее утверждениеКак работает класс сканера JAVA внутри?

Scanner sc = new Scanner (System.in) 

означает, что вы создаете новый объект Scanner класса под названием sc, который наследует атрибуты и методы класса Scanner для использования определенным образом. Но я хотел бы знать, что делает аргумент System.in?

Когда компилятор проходит этап создания экземпляра класса, он сначала создаст конструктор класса, который принимает значение System.in как аргумент, являющийся объектом класса InputStream. Это означает, что, когда вы вызываете метод класса Scanner nextInt() или, то, что вы по существу делаете, отправляет этот ввод в этот метод, который выполняет синтаксическую проверку на нем, а затем передает его на класс InputStream, который превратит его в байты который затем может быть записан в память.

Как это работает? или я полностью с рельсов с этим?

+0

Я предполагаю, что он обертывает 'InputStream' (например, System.in), который вы предоставляете в' InputStreamReader', затем анализирует его, используя какой-то «BufferedReader» или что-то в этом роде. Я не смотрю на это раньше, я просто знаю, что это медленно. – byxor

+0

'System.in' - это поток ввода, назначенный средой выполнения для стандартного ввода (т. Е. Материал, который вы вводите на консоли) процесса. Этот вопрос здесь слишком широк, но вы, вероятно, захотите задать более короткие, более конкретные вещи. – pvg

+4

Вы также можете прочитать исходники и посмотреть сами: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Scanner.java/. – Tom

ответ

0

Класс сканера может использоваться для считывания ввода из разных источников. Объект сканера хранит адрес объекта InputStream, присутствующего в классе System. Объект Input Stream системного класса считывает данные с клавиатуры, которая является байтовой формой потока/байта. Класс Scanner преобразует этот прочитанный байт в конкретный тип данных. Класс сканера был введен в Java5.0, до тех пор BufferedReader был предпочтительным режимом чтения данных, которые считывали данные как строку. напр:

Scanner scan=new Scanner(System.in); 

В этой строке сканирования является объектом класса сканера, этот объект содержит адрес объекта входного потока. Когда байт данных считывается с клавиатуры, объект Input Stream, который содержит адрес клавиатуры (, каждое устройство устанавливается как специальный или специальный файл байта/блока в ОС, поэтому адрес устройства по существу начальный адрес специального файла блока/символа в памяти) передает эти данные объекту класса Scanner, который можно манипулировать для чтения данных в виде определенного типа данных.

Смежные вопросы