В JAVA, когда вы импортируете класс Scanner и создаете объект Scanner, как работает базовая логика для захвата ввода и записи в память? Я понимаю, что следующее утверждениеКак работает класс сканера JAVA внутри?
Scanner sc = new Scanner (System.in)
означает, что вы создаете новый объект Scanner
класса под названием sc
, который наследует атрибуты и методы класса Scanner для использования определенным образом. Но я хотел бы знать, что делает аргумент System.in
?
Когда компилятор проходит этап создания экземпляра класса, он сначала создаст конструктор класса, который принимает значение System.in
как аргумент, являющийся объектом класса InputStream
. Это означает, что, когда вы вызываете метод класса Scanner nextInt()
или, то, что вы по существу делаете, отправляет этот ввод в этот метод, который выполняет синтаксическую проверку на нем, а затем передает его на класс InputStream, который превратит его в байты который затем может быть записан в память.
Как это работает? или я полностью с рельсов с этим?
Я предполагаю, что он обертывает 'InputStream' (например, System.in), который вы предоставляете в' InputStreamReader', затем анализирует его, используя какой-то «BufferedReader» или что-то в этом роде. Я не смотрю на это раньше, я просто знаю, что это медленно. – byxor
'System.in' - это поток ввода, назначенный средой выполнения для стандартного ввода (т. Е. Материал, который вы вводите на консоли) процесса. Этот вопрос здесь слишком широк, но вы, вероятно, захотите задать более короткие, более конкретные вещи. – pvg
Вы также можете прочитать исходники и посмотреть сами: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Scanner.java/. – Tom