浏览 2930 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-10
今天碰到一个关于BufferedReader的mark()问题,于是去google了一下,发现N年前一篇帖子(汗一个)和我遇到的问题一样,但貌似没有最终的明确结论。 写道
标 题: 关于BufferedReader的mark()问题
发信站: BBS 水木清华站 (Wed Apr 21 19:35:26 2004) 在做第三次的作业时,为了统计行数,我先用把文件读了一遍,然后要让文件指针指向文件头,于是我在文件的最开始mark()了一下,mark()的长度为file.length(),当指针指到文件末后用reset()指回来,但是我发现了一个奇怪的问题,如果文件的最后一个字符是中文,则一切正常,如果文件的最后一个字符是英文,则java.io.IOException: Mark invalid,这时如果使用mark()中的长度设为file.length()+1,才正确,我百思不得其解,希望大家能给我解答。我的代码如下: myFile = new File(filename); fr = new FileReader(myFile); br = new BufferedReader(fr); br.mark((int)myFile.length()); while (null != br.readLine()) { line++; } br.reset();
我今天遇到的问题也是一个样的,测试代码如下 class BufferedReaderDemo { public static void main(String[] args) throws IOException { String s = "This is a © copyright symbol but this is & copy not."; char buf[] = new char[s.length()]; s.getChars(0, s.length(), buf, 0); CharArrayReader in = new CharArrayReader(buf); BufferedReader f = new BufferedReader(in); int c,d = 0; f.mark(s.length() + 1); //这里如果写f.mark(s.length())在后面f.reset()时候就会报java.io.IOException: Mark invalid错误 while ((c = f.read()) != -1){ d++; } f.reset(); } } 不知道为什么,希望大家帮我解答一下,谢谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |