`
chencang
  • 浏览: 419329 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于BufferedReader的mark()问题

    博客分类:
  • Java
阅读更多

今天碰到一个关于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();
	}
}

 不知道为什么,希望大家帮我解答一下,谢谢。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics