2014-02-17 5 views
-1

У меня есть огромные файлы, которые были возвращены в качестве ответа на запрос. Я хочу, чтобы агрегированный список показывался пользователю. Раньше, когда файлы были небольшими, я читал их отдельно и суммировал результат в третьем файле, но теперь даже чтение означает задержку в несколько секунд, которую пользователи не могут терпеть. Есть ли способ, которым файл может быть сшито, и агрегированный результат будет представлен пользователю?Что касается сшивания файлов

Ранее я попробовал команду как «file1 fiile2 кошка >> file3», который seemlessly интегрирует содержание file1 и file2 в file3, но эта команда не работает, когда я

процесса р = Runtime.getRuntime() .exec ("cat file1 fiile2 >> file3"); BufferedReader br = new BufferedReader (новый InputStreamReader (p.getInputStream()));

+1

Необходимо указать некоторые сведения о вашей реализации. Является ли агрегированный файл просто конкатенацией отдельных файлов? Или есть некоторая обработка (т.е. удаление дубликатов и т. Д.). –

+0

Я бы не рекомендовал использовать 'Runtime.exec()' –

+0

Да, агрегированный файл - это просто конкатенация отдельных файлов .... –

ответ

0

Судя по сценарию оболочки, который вы используете, ваша «агрегация» на самом деле просто конкатенация файлов.

Если это так, то вам просто нужно что-то вроде этого:

OutputStream os = ... 

    byte[] buffer = new byte[8192]; // or maybe a bit bigger 
    int nosRead; 
    try (InputStream is = new FileInputStream("file1")) { 
     while ((nosRead = is.read(buffer)) > 0) { 
      os.write(buffer, 0, nosRead); 
     } 
    } 
    try (InputStream is = new FileInputStream("fiile2")) { 
     while ((nosRead = is.read(buffer)) > 0) { 
      os.write(buffer, 0, nosRead); 
     } 
    } 

Там нет необходимости использовать внешнюю команду для конкатенации файлов. Выполнение «строчки» напрямую (как указано выше) означает, что вы немедленно начнете отправлять данные пользователю. Предполагая, что это все, что есть в вашей «сшивке», не обязательно использовать Readers/Writers и избегать этого, что делает это немного быстрее.

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