2012-06-06 4 views
1

Как бы я прочитал два файла журнала, размер которых равен одному TB, без исчерпания памяти на моей машине. Я бы сделал некоторое сравнение с обоими из них. Я хотел бы сделать это в Java.Wow ниже работает код? Меня беспокоит, что 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

Вы уже пробовали этот код? Это домашнее задание? – hatchet

+7

Запустите его, сообщите нам, как это происходит. Если/когда он терпит неудачу *, то * уместно задать вопрос об этом. – Crisfole

+0

Что такое * актуальный вопрос? Является ли это «правильным» способом? Он будет работать, но вы собираетесь выводить tb данных на консоль. –

ответ

3

Возможно, ваш код будет работать, потому что вы загружаете каждую строку в память. Однако вы потеряете вывод в буфере stdout, если он будет прочитан более нескольких сотен строк.

Лучшее, что можно сделать для сравнения - загрузить несколько предметов в коллекцию, а затем выбросить те, которые вам не нужны, когда вы закончите с ними. Это позволит снизить потребление памяти. Если вы хотите быть умными, следите за использованием памяти вашего процесса и начинайте очищать, когда он достигает фиксированного порога.

Смежные вопросы