Насколько я знаю, два наиболее распространенных метода чтения символьных данных из файла в Java - это использование Scanner
или BufferedReader
. Я также знаю, что BufferedReader
читает файлы эффективно, используя буфер, чтобы избежать операций с физическим диском.
Мои вопросы:
- Работает
Scanner
так же хорошо, какBufferedReader
? - Почему бы вы выбрали
Scanner
болееBufferedReader
или наоборот?
java
file-io
java.util.scanner
bufferedreader
Мадс Мобек
источник
источник
Ответы:
Scanner
используется для анализа токенов из содержимого потока, в то время какBufferedReader
просто читает поток и не выполняет никакого специального анализа.Фактически вы можете передать a
BufferedReader
в качествеscanner
источника символов для разбора.источник
Scanner
конечном счете зависит от чего-то еще для его ввода, который вполне может быть синхронизирован.В текущей версии / сборке JDK6 (b27)
Scanner
буфер имеет меньший буфер ( 1024 символа ) по сравнению сBufferedReader
( 8192 символа ), но этого более чем достаточно.Что касается выбора, используйте,
Scanner
если вы хотите проанализировать файл, используйте,BufferedReader
если вы хотите читать файл построчно. Также см. Вводный текст их вышеупомянутой документации API.nextXxx()
методы вScanner
классе.источник
readInt();
readFloat (); и т. д. Теперь получил, что означает синтаксический анализ. и BalusC, можете ли вы уделить мне немного времени, всего 10 минут в чате, я хочу немного спросить о буферизованном, как это работает.BufferedReader
в конструкторе сканера? Это хорошая идея?Scanner
Буфер будет расширен по мере необходимости для сопоставления с образцом. Поэтому, если вам нужен больший буфер, вам нужно только вызвать его, напримерfindWithinHorizon("\\z", 8192)
, для него и после него, он будет использовать буфер с емкостью8192
символов (или весь файл, если он меньше этого).Смотрите эту ссылку , оттуда цитируется следующее:
источник
BufferedReader
имеет значительно большую буферную память, чем сканер. Используйте,BufferedReader
если вы хотите получить длинные строки из потока, и используйте,Scanner
если вы хотите анализировать токен определенного типа из потока.Scanner
Можно использовать токенизацию с использованием пользовательского разделителя и анализировать поток в примитивных типах данных, в то время какBufferedReader
можно только читать и хранить String.BufferedReader
синхронно покаScanner
нет. Используйте,BufferedReader
если вы работаете с несколькими потоками.Scanner
скрывает IOException, в то время какBufferedReader
выкидывает его немедленно.источник
Я предлагаю использовать
BufferedReader
для чтения текста.Scanner
прячется,IOException
аBufferedReader
сразу кидает.источник
Разница между BufferedReader и Scanner заключается в следующем:
Код для чтения строки из консоли:
BufferedReader :
Сканер :
источник
Ниже приведены различия между BufferedReader и сканером.
Спасибо
источник
Основные отличия:
пример
печатает следующий вывод:
Тот же вывод может быть сгенерирован с помощью этого кода, который использует регулярное выражение для анализа всех четырех токенов одновременно:
BufferedReader:
Считывает текст из потока ввода символов, буферизует символы, чтобы обеспечить эффективное чтение символов, массивов и строк.
Размер буфера может быть указан, или размер по умолчанию может быть использован. Значение по умолчанию достаточно велико для большинства целей.
Как правило, каждый запрос чтения, сделанный устройством чтения, вызывает выполнение соответствующего запроса чтения базового символа или потока байтов. Поэтому желательно обернуть BufferedReader вокруг любого Reader, чьи операции read () могут быть дорогостоящими, например FileReaders и InputStreamReaders. Например,
буферизует ввод из указанного файла. Без буферизации каждый вызов read () или readLine () может привести к тому, что байты будут считаны из файла, преобразованы в символы и затем возвращены, что может быть очень неэффективным. Программы, которые используют DataInputStreams для текстового ввода, могут быть локализованы путем замены каждого DataInputStream соответствующим BufferedReader.
Источник: Ссылка
источник
Существуют разные способы ввода данных в Java, такие как:
1) BufferedReader 2) Сканер 3) Аргументы командной строки
BufferedReader Чтение текста из потока ввода символов, буферизация символов, чтобы обеспечить эффективное чтение символов, массивов и строк.
Где Scanner - простой текстовый сканер, который может анализировать примитивные типы и строки, используя регулярные выражения.
если вы пишете простую программу чтения журнала, то буферная программа чтения подходит. если вы пишете анализатор XML, то сканер - более естественный выбор.
Для получения дополнительной информации, пожалуйста, обратитесь:
http://java.meritcampus.com/t/240/Bufferedreader?tc=mm69
источник
Ответ ниже взят из Чтения из Консоли: JAVA Scanner vs BufferedReader
Когда вы читаете ввод с консоли, есть два варианта для достижения этой цели. Первое использование
Scanner
, другое использованиеBufferedReader
. Оба они имеют разные характеристики. Это означает различия, как использовать это.Сканер рассматривал данный ввод как токен. BufferedReader просто читает построчно данные, введенные как строка. Сканер сам по себе предоставляет возможности синтаксического анализа, такие как nextInt (), nextFloat ().
Но чем отличаются другие?
Сканер поставляется с JDK версии 1.5 и выше.
Когда следует использовать сканер или Buffered Reader?
Посмотрите на основные различия между ними, один из которых использует токены, другие используют потоковую линию. Когда вам нужны возможности анализа, используйте вместо этого сканер. Но мне удобнее с BufferedReader. Когда вам нужно прочитать из файла, используйте BufferedReader, потому что он использует буфер при чтении файла. Или вы можете использовать BufferedReader в качестве входных данных для сканера.
источник
BufferedReader, вероятно, даст вам лучшую производительность (потому что Scanner основан на InputStreamReader, посмотрите источники).ups, для чтения из файлов он использует nio. Когда я проверял производительность nio по сравнению с BufferedReader для больших файлов, nio показывал немного лучшую производительность.источник
Я предпочитаю,
Scanner
потому что он не генерирует проверенные исключения и, следовательно, его использование приводит к более упорядоченному коду.источник