Столкновение с трудностями при использовании BufferedInputStream вместо сканера - PullRequest
0 голосов
/ 27 марта 2012

Для чтения ввода из STDIN я всегда использовал Scanner объект. Недавно я прочитал о BufferedInputStream здесь , что BufferedInputStream - самый быстрый способ чтения ввода. В Scanner у нас есть различные методы (читать integer nextInt(), читать byte nextByte(), читать string next() и т. Д.) В настоящее время я читаю некоторые строки (не более 100000 символов) и некоторые целые числа. В соответствии с этими целыми числами я также запускаю цикл for, который получает входные данные от STDIN. Ниже приведен фрагмент кода, который я использую до сих пор -

    Scanner sc = new Scanner(System.in);
    int numOfStr = sc.nextInt();
    String inputStr[] = new String[numOfStr];
        for (int i = 0; i < numOfStr; i++) {
                inputStr[i] = sc.next();
        }
    }

Однако с BufferedInputStream у нас есть только read() для чтения ввода. Так, как я могу дифференцировать входы Может кто-нибудь записать код BufferedInputStream, эквивалентный указанному выше Scanner? Должен ли я использовать StringTokenizer класс для токенизации данных, которые я получаю от read()? Разве это не сделает весь материал (чтение ввода из STDIN) медленнее, чем Scanner?

Ответы [ 2 ]

1 голос
/ 27 марта 2012

BufferedInputStream не анализирует какие-либо данные, он просто считывает данные. Вы можете передать буферизованный ридер в класс сканера и проанализировать его оттуда.

0 голосов
/ 27 марта 2012

Посмотрите главу о потоках в руководстве по Java.Он описывает различные типы потоков, их назначение и использование.

Однако я не совсем понимаю, почему операция чтения должна быть быстрой при чтении ввода от пользователя.Пользователь будет печатать намного медленнее (на несколько порядков медленнее), чем тот метод, который вы используете для чтения ввода с клавиатуры.

...