带有InputStream的Java Scanner无法正常工作

时间:2012-03-20 01:17:08

标签: java inputstream java.util.scanner

我正在从源读取一个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 :(得分:0)

只创建一个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`,没有任何东西可以扫描。

答案 1 :(得分:0)

  

第二次打印返回零。

因为您已经第一次读到EOS计数行的流。因此,当你再次这样做时,剩下的零行数,所以你得零。

按设计工作。