java BufferedReader问题

FileReaderfr=newFilereader(file);\\file即文件路径BufferedReaderbr=newBufferedReader(fr);请问... FileReader fr=new Filereader(file); \\file即文件路径
BufferedReader br=new BufferedReader(fr);

请问,在我将br通过read方法读取到fr的末尾之后,如何重置br使其能重新从fr第一行读取?
另外BufferedReader的mark方法如何使用?
嗯,所以对这种重复读取文件的情况还是新建个类进行存储比较好的说...
展开
 我来答
土憨宝
2014-04-23 · TA获得超过368个赞
知道小有建树答主
回答量:203
采纳率:100%
帮助的人:216万
展开全部
要解决楼主的问题非常简单,在生成br之后开始读数据前,mark一下,然后想回到第一行时reset一下就可以了。其实一般人对mark方法比较疑惑的是它里面的参数,要了解他参数的含义,先要了解BufferedReader的实现方式,从名字看他就是一个缓存,比如你文件有10000个字节,bufferedReader每次只缓存1000个字节。正常情况下,假设我现在缓存里面缓存的是1000到2000字节的内容,你在1500的时候mark了一下,那么你读到2500的时候,他的缓存会变成缓存1500-2500字节的内容,这个时候,他还是包含你的mark字节的,你这时候想reset还是可以的,但是你如果继续往下读,就不行了,因为他只能缓存1000个字节,你继续读得话你的mark字节他就丢失了。mark函数的参数就是这个意思,在你mark的地方往后n个字节之内你都是可以reset回来的,如果超过了,就不得行了。假设BufferedReader的缓存长度是8192(他默认就是8192),你的mark参数为n,如果n小于8192,是没有意义的,因为我本来就缓存了8192个字节,你在这个长度内都是任意reset的,如果n设置的大于8192,那么相当于你把bufferedReader的缓存长度变长了,这样也有坏处。
不知道我讲明白没有,总之,一般mark参数没有什么意义,主要看你定义BufferedReader的时候给他定义的缓存长度是多少。
追问
有些细节的地方问下(虽然意义不大),见谅:
1、如果BufferReader(简称BR)缓存了100字符,读取20个字符后,BR是仍有100字符,但有个标记指向第21个;还是只剩80个字符?
2、如果第一个的答案是前者,那么mark本身可以理解为一个标记吗(reset时BR的标记重定位至mark)?
如果答案是后者则理解mark为另一个buffer或String?
追答
是前者,mark只是一个标记,他就是一个int,记录的是br里面当前缓存的一个下标值。br里的缓存是用一个char[]实现的。你自行mark方法时,他会把当前读到的地方(nextChar)赋值给这个mark。当然这个mark不是一直不变的,会随着char[]缓存的内容他自行会调整。具体的话我感觉用语言不好说,你最好吧BufferedReader的源码打开自己看下他的fill()方法
吹阴风点鬼火
2014-04-22 · TA获得超过211个赞
知道小有建树答主
回答量:474
采纳率:100%
帮助的人:303万
展开全部
文档里边查到个reset方法,难道不是这个吗?
追问
reset方法需要使用到mark,但是mark的用法我不是很了解。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式