【问题标题】:Java RandomAccessFile's memory usage [duplicate]Java RandomAccessFile的内存使用[重复]
【发布时间】:2026-01-08 17:10:02
【问题描述】:

我正在尝试从一个非常大 (>100 GB) 的 ascii 编码文本文件中访问数据(只读)。该文件主要包含坐标(16 位浮点数,包括小数点)和一些其他次要信息(名称等)。

因此我考虑使用 RandomAccessFile 来避免将大量数据加载到内存中。 (例如,我可以将数据行缓存到内存中以加快速度,但让我们将其保存以备后用,并假设时间在这里不是问题,只要它不接近无穷大)。

问题:我可以假设 seek 和 read 方法不会导致 RandomAccessFile 将大量数据加载到内存中吗?

非常感谢。

【问题讨论】:

  • 如果数据是只读的,您应该使用DataInputStream 包裹BufferedInputStream。你会发现这个速度要快很多倍,唯一的内存开销是BufferedInputStream 的缓冲区。
  • @EJP 那大概要多少钱?谢谢!

标签: java randomaccessfile


【解决方案1】:

你是对的。 RandomAccessFile 基本上只是实际文件的包装器,除了当前指针之外没有太多内部状态。所有读/写方法都要求您为其提供应加载数据的自己的数组。

另外,这个问题已经回答了 Java : Read last n lines of a HUGE file Does RandomAccessFile in java read entire file in memory?

【讨论】:

  • 其中一个答案在 cmets 中含糊其辞。我只是想要确认!谢谢。