【发布时间】:2019-09-07 17:41:35
【问题描述】:
python 中的文件对象有一个名为seek 的方法,它允许您将文件书签放在文件中的任何位置。特别是seek(0) 将文件书签放回文件的开头。
可以对 Java 中的 BufferedReader 做类似的事情,还是只需要制作一个新的?
【问题讨论】:
标签: java bufferedreader
python 中的文件对象有一个名为seek 的方法,它允许您将文件书签放在文件中的任何位置。特别是seek(0) 将文件书签放回文件的开头。
可以对 Java 中的 BufferedReader 做类似的事情,还是只需要制作一个新的?
【问题讨论】:
标签: java bufferedreader
您不能在 BufferedReader 上这样做,因为他只能返回指定数量的字节(实际上是他的缓冲区大小)。
你可以做什么:
FileInputStream fileinputStream = ...;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileinputStream));
// reset to the beginning of file and overwrite old buffered reader
fileinputStream.getChannel().position(0);
bufferedReader = new BufferedReader(new InputStreamReader(fileinputStream));
这里有一些关于FileChannel 与fileinputStream.getChannel(): 一起使用的文档
https://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html
所以对于你的问题:是的,你需要创建一个新的
【讨论】:
RandomAccessFile 对象上使用 seek。 docs.oracle.com/javase/10/docs/api/java/io/…
总之,没有。你所能做的就是制作一个新的。仅当文件小于缓冲区大小时,标记/重置才有效。这当然是不可接受的。
【讨论】: