Java 如何重置BufferedReader的位置?
iam使用BufferedReader从文件中读取行。当我从文件中读取所有行时,我想从头开始重新读取该文件,我如何才能这样做?Java 如何重置BufferedReader的位置?,java,android,bufferedreader,Java,Android,Bufferedreader,iam使用BufferedReader从文件中读取行。当我从文件中读取所有行时,我想从头开始重新读取该文件,我如何才能这样做?BufferedReader.mark()和BufferedReader.reset()工作不正常。这是我的代码 FileReader fR = new FileReader(this.sTargetPath); final BufferedReader vcfBuffer = new BufferedReader(fR); //
BufferedReader.mark()
和BufferedReader.reset()
工作不正常。这是我的代码
FileReader fR = new FileReader(this.sTargetPath);
final BufferedReader vcfBuffer = new BufferedReader(fR);
// vcfBuffer.mark(0);
Boolean nextLine = true;
while (nextLine) {
try {
String line = vcfBuffer.readLine();
}
} catch (IOException e) {
nextLine = false;
}
}
}
vcfBuffer.reset();
如何重置BufferedREader位置?谢谢你的帮助,医生说:(我的重点):
参数:
readAheadLimit-限制在保留标记的同时可以读取的字符数。尝试重置流
在读取达到或超过此限制的字符后,可能会失败。A限制
值大于输入缓冲区的大小将导致新的缓冲区
要分配的大小不小于限制。如此之大
应谨慎使用这些值
如果使用0作为参数调用它,那么只要从读取器中再读取一个字节,就可能无法重置
解决方案是以文件的长度作为参数调用mark方法。但当然,这将导致在内存缓冲区中读取整个文件。如果您不想这样做,请关闭读卡器,然后重新打开一个新的BufferedReader。再次创建一个新的BufferedReader对象。。或者使用
RandomAccesFile
seek(0)
方法。除了创建另一个读卡器之外,没有其他方法了吗?我不认为这是个好主意,它可以工作,但效率不高,对吗?我认为你可以在阅读第一行之前创建一个标记,然后你可以稍后使用reset()方法返回到这一点,不过我以前没有尝试过。如果你读的内容超过了内部缓冲区所能容纳的内容,则BufferedReader
的“标记”无效。将文件内容读取并存储为char[]
数组,并使用CharArrayReader
而不是FileReader
作为BufferedReader
的输入,或者增加缓冲区的大小。使用BufferedReader总是很快,但占用的内存很少。只要能用就行。我不知道如何设置开始输入流。