我有一个巨大的结果集,比方说,包括 100 万行。我通常使用以下代码片段将它们写入文件,但我总是内存不足。有什么有效的方法可以消除这个问题吗?
PrintWriter writer = new PrintWriter(filename, "UTF-8");
iteration -> { writer.println(a single string); }
writer.close();
最佳答案
既然你说了 ResultSet,我认为这是来自数据库?首先,使用流式结果集。 MySQL 的 JDBC 驱动程序喜欢在内存中缓冲所有行,对于 1M(或 1B)行,这可能是个问题。
如果您想要扩展,请以线程方式进行。让一个线程(生产者)从 ResultSet 读取行,另一个线程(消费者)将行写入文件。像 ArrayBlockingQueue 这样的东西非常适合这个。如果消费者跟不上生产者,就开始阻塞,等待消费者追上。这种方法占用的内存更少,速度更快,因为您的 IO 是并行完成的。
关于java - 将大行写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24314578/