假设有一个文件太大而无法存储。我怎样才能从中得到一条随机线?谢谢。
更新: 我希望每条线的概率相等。
最佳答案
如果只想要一行,则读取整个文件似乎有点过分。以下应该更有效:
- 使用 RandomAccessFile寻找文件中的随机字节位置。
- 向左和向右寻找下一行终止符。让 L 在它们之间划线。
- 有概率 (MIN_LINE_LENGTH/L.length) 返回 L。否则,从第 1 步重新开始。
这是 rejection sampling 的变体.
行长包括行终止符,因此 MIN_LINE_LENGTH >= 1。(如果您知道对行长有更严格的限制,那就更好了)。
值得注意的是,该算法的运行时间不依赖于文件大小,只依赖于行长,即它的扩展性比读取整个文件要好得多。
关于java - 如何在Java中获取文本文件的随机行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2218005/