Java сканер с InputStream не работает - PullRequest
0 голосов
/ 20 марта 2012

Я читаю InputStream (fis) из источника, по которому мне нужно выполнить несколько поисков.Я использую класс Scanner и создаю его после каждого поиска.Но это работает только в первый раз.Есть ли способ сбросить объект сканера?У меня нет контроля над потоком.

Scanner sc = new Scanner(new BufferedReader(new InputStreamReader(
                fis, MIFConstants.ENCODING_UTF_8)));
        int count = 0;
        while (sc.hasNextLine()) {
            count++;
            sc.nextLine();
        }
        System.out.println(count);

        sc = new Scanner(new BufferedReader(new InputStreamReader(fis,
                MIFConstants.ENCODING_UTF_8)));
        count = 0;
        while (sc.hasNextLine()) {
            count++;
            sc.nextLine();
        }
        System.out.println(count);

Второй отпечаток возвращает ноль.Есть идеи по этому поводу?

Ответы [ 2 ]

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

Второй отпечаток возвращает ноль.

Поскольку вы уже прочитали поток в строки подсчета EOS в первый раз.Поэтому, когда вы делаете это снова, остается ноль строк для подсчета, и вы получаете ноль.

Работает, как задумано.

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

Создайте только один Scanner и используйте его каждый раз. Проблема возникает из-за BufferedReader *buffers* your input -- which means that it reads more than it needs and stores it up for later. When you create your second scanner, all the input has already been grabbed by the first BufferedReader`, не оставляющего ничего для сканирования.

...