我有一臺具有4 GB內存和10 GB內存使用率的文件。現在,我要檢查,如果該文件中的每一行都是唯一的,所以我寫了下面的代碼:如何提取4GB內存中大於10 GB的文件中的獨特行
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class Cleaner {
public static void main(String[] args) throws IOException {
if (args.length < 2) {
System.out.println("Too less parameters!");
return;
}
File file = new File(args[0]);
BufferedReader buff = new BufferedReader(new FileReader(file));
String line;
Set<String> set = new HashSet<String>();
while ((line = buff.readLine()) != null) {
set.add(line);
}
FileWriter fw = new FileWriter(args[1]);
for (String s : set) {
fw.write(s + "\n");
fw.flush();
}
fw.close();
buff.close();
}
}
但我得到一個OutOfMemoryException異常,所以我的問題是:
我應該如何改變我的代碼來獲得每行都是唯一的文件?
非常感謝您的幫助。
拆分成塊並比較pairwaise。或者散列每一行,並將散列和行一起存儲。 – user
散列問題是,每一行只是一個散列,我應該如何分塊我可能會錯過一些重複的行。 –
看看RandomAccessFile,你可以從RandomAccessFile'a'中讀取第1行,並將其與RandomAccessFile'b'的所有其他行進行比較。之後讀取第2行等 – user