帮我用java实现一个读取百万数据写入文件,并且不会oom
时间: 2024-03-15 14:46:04 浏览: 112
读取百万级数据量的xlsx文件的java代码
3星 · 编辑精心推荐
当需要读取大量数据时,最好不要将所有数据都读入内存,因为这样容易导致内存不足(OOM)。可以使用 Java 中的流(Stream)来逐行读取数据,并且使用缓冲区(Buffer)来减少磁盘 I/O 操作的次数。以下是一个简单的例子:
```java
import java.io.*;
public class Main {
public static void main(String[] args) {
String inputFile = "input.txt";
String outputFile = "output.txt";
try (BufferedReader br = new BufferedReader(new FileReader(inputFile));
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile))) {
String line;
int count = 0;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
count++;
if (count % 10000 == 0) {
bw.flush(); // 每隔一定数量的数据就刷新缓冲区
}
}
bw.flush(); // 在处理完所有数据后,最后刷新缓冲区
System.out.println("写入完成,共写入 " + count + " 条数据");
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,我们使用了 BufferedReader 和 BufferedWriter 来分别读取和写入数据。在循环中,我们逐行读取数据并写入到输出文件中,每隔一定数量的数据就刷新缓冲区,这样可以减少磁盘 I/O 操作的次数,提高写入数据的效率。最后,在处理完所有数据后,我们再次刷新缓冲区,确保所有数据都被写入文件中。
需要注意的是,如果数据量非常大,那么可能需要使用更高效的 I/O 操作,例如使用 NIO(New I/O)操作来替代传统的 I/O 操作,以获得更好的性能。
阅读全文