Какая разница в этих способах чтения при вводе пользователем?
Я сталкивался с этой темой Как получить базовый пользовательский ввод для Java, и хотя ответа на этот конкретный вопрос было достаточно, я удивился, почему существует так много разных способов чтения при вводе пользователем. В частности, каковы плюсы и минусы этих различных способов чтения в пользовательском вводе? Когда имеет смысл использовать один поверх другого?
Эти возможные пути упоминаются в этом посте.
- Класс сканера
- Классы BufferedReader и InputStreamReader
- Класс DataInputStream
- Консольный класс
2 ответа
Они все предназначены для использования в разных вещах. Я сделаю все возможное, чтобы объяснить, но я не до конца понял документы и не использовал каждый из них, поэтому, если вы заметите какие-либо ошибки, пожалуйста, дайте мне знать.
Scanner
Этот класс предназначен для обработки входных данных практически из любого потока и дает разработчику удобный и простой способ управлять им, не изучая слишком много классов. Это довольно простой, но в большинстве случаев этого достаточно, например, если вы просто хотите, чтобы пользовательский ввод был простым для изучения способом,Scanner
это то, что вы хотите.BufferedReader
Класс предназначен для чтения из файлов быстро, за счет памяти. Он предназначен для обертки вокруг других, более простых классов, таких какFileInputStream
(технически, любой класс, которыйextends InputStream
) и путем буферизации следующих нескольких байтов и чтения из этого массива вместо непосредственного потока и чтения только из потока, когда он достигнет конца буфера. Если вас больше интересует скорость, а не низкое использование памяти, вы захотите этого - хотя на самом деле она не использует намного больше памяти, если вы явно не скажете это.DataInputStream
это более общий класс ввода для данных. Это если вы просто хотите читать примитивы из потока - вместо того, чтобы читать отдельные биты напрямую и составлять соответствующие типы, это обеспечивает простой способ сделать это для вас. На этой странице документации говорят, что нужно получить дополнительную информацию о том, как на самом деле работают методы.Console
Этот класс явно предназначен для программы интерфейса командной строки (CLI), то есть для чтения данных и записи данных на консоль. Это какScanner
- простой, легкий в освоении класс для выполнения основных задач.
В предложении они предназначены для разных задач, и то, что вы используете, должно определяться тем, что вы пытаетесь сделать.
Сканер - самый дружественный читатель ввода в Java, и мне это нравится! BufferedReader и InputStreamReader предназначены для ввода Reader и работают также с регистрацией, что-то вроде записи читаемых входных данных в файл и т. Д., И я не использую два других, потому что наиболее важными классами ввода-вывода являются Scanner и BufferedReader... вы можете также используйте System.IO для чтения входных данных, но я предпочитаю сканер для себя