论坛首页 入门技术论坛

关于BufferedReader的mark()问题

浏览 2889 次
精华帖 (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();
	}
}

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

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics