我希望能够在以后的任何时间打开一个(非常大的)文件并从任意点读取数据,而无需将整个内容保存在内存中。
这可能吗?
我想打开一个文件的句柄,没有其他东西可以读取/写入这个文件,并且能够在稍后从任何给定的偏移量和长度中获取数据,而无需再次在磁盘中搜索文件。
我以为会有某种
1, open handle to file
2, create reader
3, skip reader to X
4, read for Y
5, reset reader to 0
6, return to step 3
起初它似乎BufferedReader.mark
是我所追求的,但文档建议如果我mark, skip, read, reset
从我标记的地方到我跳过的地方的内容,会被保存在内存中吗?
从文档中,
在保留标记的同时限制可以读取的字符数。在读取达到此限制或超过此限制的字符后尝试重置流可能会失败。大于输入缓冲区大小的限制值将导致分配一个大小不小于限制的新缓冲区。因此,应谨慎使用较大的值。
它说“读”,所以也许如果我跳过,它不计入这个限制(这是有道理的),但我可能读了很多,所以看起来这个新分配的输入缓冲区可能会变得非常大。我不希望这样的事情发生...
有没有更好的方法来解决这个问题?