如何在JAVA中高效地读取超大文件(比如4GB),并将内存容量限制在500MB

如何在JAVA中高效地读取超大文件(比如4GB),并将内存容量限制在500MB,java,algorithm,performance,Java,Algorithm,Performance,在一次采访中,我被要求计算存储在非常大的文件中的数据的平均值。除了通过扫描仪读取文件,逐行读取并保持全局计数器和平均值之外,我想不出有效的解决方案。 面试官对解决方案印象不深我怀疑面试官正在寻找一种解决方案,包括读取大块文件,然后在内存中进行处理。Java中有一些机制,可以将大块数据读取为byte[]或char[],然后通过内存中的扫描器进行处理。询问您是否需要关于如何实现这一目标的更多细节 很有可能面试官错了,而你是对的。现代的O/S和JVM非常擅长解释您正在做的事情和阅读的内容。虽然我还没有

在一次采访中,我被要求计算存储在非常大的文件中的数据的平均值。除了通过扫描仪读取文件,逐行读取并保持全局计数器和平均值之外,我想不出有效的解决方案。
面试官对解决方案印象不深

我怀疑面试官正在寻找一种解决方案,包括读取大块文件,然后在内存中进行处理。Java中有一些机制,可以将大块数据读取为byte[]或char[],然后通过内存中的扫描器进行处理。询问您是否需要关于如何实现这一目标的更多细节


很有可能面试官错了,而你是对的。现代的O/S和JVM非常擅长解释您正在做的事情和阅读的内容。虽然我还没有测试过,但有一种可能性,那就是试图优化阅读效果会适得其反

真正的解决方案:不用麻烦,只要读一下,JVM将以最有效的方式为您处理它-这就是为什么您使用这样一种语言,而不是C:-无需计数,只需计算一个。@azurefrog如果我错了,请纠正我。对于移动平均线,我们需要处理的总点数和累计平均数,直到达到该点为止。请看-这个问题是合法的,但目的不是代码方面的答案。它的目的是弄清楚您是否知道Java或任何其他类型的框架语言会为您做什么,或者您是否是一个彻底的开发人员。您确定没有被要求计算中间值吗?