在Java
中,有一个335Gb
大小的文件,每行都包含单独的数字,我需要逐行读取它,就像它是一个数字流一样——我不能把所有数据都保存在内存中。有人告诉我Scanner
课程不起作用。你能推荐最好的方法吗?
没有一个java.io输入流类会"将所有数据保存在内存中"。我认为您可以自由选择最适合自己的内容,如BufferedReader或DataInputStream等。
如果您使用BufferedReader,您应该能够在一个线程中获得高达90 MB/s的速度。
您可以使用trick来分解文件并同时读取部分数据,但只有当您的磁盘读取吞吐量较高时,这才有帮助。
例如,您可以一次将335GB的内存映射到内存中,而无需大量使用堆。即使你只有这个内存量的一小部分,这也会起作用。
磁盘子系统的读取传输速率是多少?