【发布时间】:2013-09-14 03:34:15
【问题描述】:
我有一个包含 15 万条记录的数据库。我想尽快将其写入文件。我尝试了很多方法,但似乎都很慢。如何让这更快?
我以 40k 为单位读取这些记录。所以首先我读了 40k,然后又读了 40k,依此类推。
读取记录后,此过程返回一个包含 40k 行的 StringBuilder。然后我们将这个 StringBuilder 写入一个文件。
private static void write(StringBuilder sb, Boolean append) throws Exception {
File file = File.createTempFile("foo", ".txt");
FileWriter writer = new FileWriter(file.getAbsoluteFile(), append);
PrintWriter out = new PrintWriter(writer);
try {
out.print(sb);
out.flush();
writer.flush();
} finally {
writer.close();
out.close();
}
}
我阅读了另一个示例,但速度同样慢:Fastest way to write huge data in text file Java
我也用 NIO api 试过了:
private static void write(StringBuilder sb, Boolean append)) throws Exception {
FileChannel rwChannel = new FileOutputStream("textfile.txt", true).getChannel();
ByteBuffer bb = ByteBuffer.wrap(sb.toString().getBytes("UTF-8"));
rwChannel.write(bb);
rwChannel.close();
}
将大量数据写入/追加到文件中的最佳方法是什么?
【问题讨论】:
-
我相信问题出在
out.print(sb)。这会在构建器上强制toString(),而这反过来又涉及复制底层字符数组。如果您需要速度,请尝试使用 char 数组缓冲区和原始字节流进行简单的重写。 -
是网络通信部分拖慢了你的速度,想办法避免通过网络传输原始数据。或许可以考虑文件压缩以加快传输阶段。