日期:2014-05-20  浏览次数:20852 次

BufferedReader.mark方法参数问题
BufferedReader有一个标记方法mark。
使用这个方法需要穿进去一个参数,参数的意思,一直没有弄明白。

看过官方文档,也看过一些资料。

目前理解使用mark方法传入的参数表示:

1、读取之后可在读取的字符长度。
2、可读取的字符长度。

如果是一种理解,数据都读取完了为什么还要多余设置读取完之后还可以在读取字符的长度?

如果是第二种理解,那么我将mark中的参数设置为0也是可以运行。

请大家告诉我真想,谢谢你们。
请不要复制网络上的参考资料或是官方文档的解释。
也不要复制别人的代码给我看。

下面是我的代码,就当前这个代码,帮忙解释一下这个参数在这里有什么用?

Java code

try {
            FileReader f = new FileReader("c:/a.txt");
            BufferedReader br = new BufferedReader(f);
            String read = br.readLine();
            while(read != null){
                System.out.println(read);
                read = br.readLine();
                if(br.markSupported()){
                    if(read.equals("511111")){
                        System.out.println("标记位置在511111");
                        br.mark(0);
                    }
                    
                    if(read.equals("911111")){
                        System.out.println("读取到这行返回到标记位置循环读取");
                        br.reset();
                    }
                }
            }
            br.close();
            f.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }




还有一个问题是,设置了mark,遇到reset方法并不是从mark设置的那行读取,而是下一行?

当前这个代码,循环往返读取数据时,不会再出现“标记位置在511111”!

那是不是意味着遇到reset方法时,从mark设置的下一行或下一个字符或数据开始读取?

------解决方案--------------------
mark(参数) 这个参数我没发现有什么用,
mark(参数) 标记位置是readLine()读取的一行数据的最后一个字符,这个字符在整个数据的位置
reset() 定位到这个位置。

个人理解仅供参考,楼主可以看下源码。
------解决方案--------------------
学习。。。
------解决方案--------------------
学习....