我有一个txt文件,它的大小大于1GB,每行都有一条记录。现在我想根据record.hashcode()%100将此文件拆分为100个txt文件,我该如何高效地完成?
每条记录都有不同的长度,这里的效率是时间和记忆
答案 0 :(得分:2)
尝试使用BufferedReader
同时读写。据我所知,它适用于大文件。
主要的想法是读取行并立即将其写入其他文件。只有当你排长队时,你才能获得糟糕的表现。
(不要将它用于二进制文件!)
int maxlinesNumber = 1000; // I took it randomly,
BufferedReader rd = null;
BufferedWriter wt = null;
try {
rd = new BufferedReader(
new InputStreamReader(
new FileInputStream("/yourfile.txt"), "UTF-8")
);
int count = 0;
for (String line; (line = reader.readLine()) != null;) {
if (count++ % maxlinesNumber == 0) {
close(wt);
wt = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(
"/newSmalfile" + (count / maxlinesNumber) + ".txt"), "UTF-8")
);
}
wt.write(line);
wt.newLine();
}
} finally {
close(wt);
close(rd);
}
关于文件的确切数量,我认为你在这里失去了计算小文件大小的效率。
您可以尝试使用相同的方式,但读取字节而不是行。但这是方向。
答案 1 :(得分:0)
我以前做过这种事。它们对性能至关重要(对我而言,正如我通过网络写入SAN)以并行处理写入。即使你的阅读是连续的,也可能不是太糟糕。
基本算法:
中提琴
陷阱: