Сканер по сравнению с BufferedReader

Как далеко я знаю, два наиболее распространенных метода чтения символьно-ориентированных данных из файла в Java использует Scanner или BufferedReader. Я также знаю что BufferedReader считайте файлы эффективно при помощи буфера для предотвращения операций физического диска. Мои вопросы:

  • Делает Scanner работает, а также BufferedReader?
  • Почему Вы выбрали бы Scanner BufferedReader или наоборот?
267
задан Vladimir Vagaytsev 18 June 2016 в 10:41
поделиться

3 ответа

Scanner используется для разбора лексем из содержимого потока, в то время как BufferedReader просто читает поток и не делает никакого специального разбора.

Фактически вы можете передать BufferedReader в scanner в качестве источника символов для разбора.

194
ответ дан 23 November 2019 в 02:22
поделиться

В последней версии / сборке JDK6 (b27) Scanner имеет меньший буфер ( 1024 символа ), в отличие от BufferedReader ​​( 8192 символа ), но этого более чем достаточно.

Что касается выбора, используйте сканер , если вы хотите разобрать файл, используйте BufferedReader , если вы хотите прочитать ] файл построчно. Также см. Вводный текст их документации по API, на которую имеется ссылка выше.

  • Синтаксический анализ = интерпретация данного ввода как токенов (частей). Он может возвращать вам определенные части напрямую в виде int, string, decimal и т. Д. См. Также все эти методы nextXxx () в классе Scanner .
  • Чтение = тупой поток. Он постоянно возвращает вам всех персонажей, которые вы, в свою очередь, должны проверять вручную, если хотите сопоставить или составить что-то полезное. Но если в любом случае этого делать не нужно, тогда достаточно чтения.
174
ответ дан 23 November 2019 в 02:22
поделиться

В настоящее время выполняется очистка массива имен. Необходимо вызвать массив, а затем отменить установку индекса в массиве:

$ar[0]==2
$ar[1]==7
$ar[2]==9

unset ($ar[2])

Два способа отмены установки значений в массиве:

<?php
# remove by key:
function array_remove_key ()
{
  $args  = func_get_args();
  return array_diff_key($args[0],array_flip(array_slice($args,1)));
}
# remove by value:
function array_remove_value ()
{
  $args = func_get_args();
  return array_diff($args[0],array_slice($args,1));
}

$fruit_inventory = array(
  'apples' => 52,
  'bananas' => 78,
  'peaches' => 'out of season',
  'pears' => 'out of season',
  'oranges' => 'no longer sold',
  'carrots' => 15,
  'beets' => 15,
);

echo "<pre>Original Array:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# For example, beets and carrots are not fruits...
$fruit_inventory = array_remove_key($fruit_inventory,
                                    "beets",
                                    "carrots");
echo "<pre>Array after key removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';

# Let's also remove 'out of season' and 'no longer sold' fruit...
$fruit_inventory = array_remove_value($fruit_inventory,
                                      "out of season",
                                      "no longer sold");
echo "<pre>Array after value removal:\n",
     print_r($fruit_inventory,TRUE),
     '</pre>';
?> 

Таким образом, отмена установки не влияет на внутренний счетчик массива!!!

http://us.php.net/unset

-121--1073621-

Сканер используется для синтаксического анализа маркеров из содержимого потока, в то время как BufferedReader просто считывает поток и не выполняет никакого специального синтаксического анализа.

Фактически можно передать BufferedReader сканеру в качестве источника символов для синтаксического анализа.

-121--566036-
  1. BufferedReader, вероятно, обеспечит вам лучшую производительность (поскольку Scanner основан на InputStreamReader, ищите источники). ups, для чтения из файлов используется nio. При тестировании производительности nio по сравнению с производительностью BufferedReader для больших файлов nio показывает немного лучшую производительность.
  2. Для чтения из файла попробуйте Apache Commons IO.
0
ответ дан 23 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: