如何读取两个大小为1 TB的日志文件,而不会耗尽我机器上的内存。我会对它们进行一些比较。我想在Java中这样做。下面的代码如下我担心的是FileStream无法保存日志文件的数据。
public static void main(String args[])
{
try{
// Open the file that is the first
// command line parameter
FileInputStream fstream = new FileInputStream("textfile.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
}
catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
任何人都可以指导我这样做的正确方法。
答案 0 :(得分:3)
您的代码可能会起作用,因为您只是将每一行加载到内存中。但是,一旦读取超过几百行,你就会丢失stdout缓冲区中的输出。
做比较的最好方法是将一些项目加载到一个集合中,然后丢弃那些你完成后不需要的项目。这将使内存使用率降低。如果你想要聪明一点,请密切关注你的进程的内存使用情况,并在达到固定的阈值时开始清理。