1

我如何读取两个大小为 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());
  }
}

任何人都可以指导我这样做的正确方法。

4

1 回答 1

3

您的代码可能会起作用,因为您只是将每一行加载到内存中。但是,一旦读取超过几百行,您将丢失 stdout 缓冲区中的输出。

最好的比较方法是将一些项目加载到一个集合中,然后在完成后丢弃不需要的项目。这将保持较低的内存使用率。如果您想聪明一点,请密切注意进程的内存使用情况,并在达到固定阈值时开始清除。

于 2012-06-06T17:53:23.760 回答