2013-09-18 2 views
2

Я успешно прочитал pdf-файл в папке формата tar.gz. Но я столкнулся с проблемой производительности - у меня больше времени, чтобы открыть папку tar.gz, содержащую более 1000 небольших файлов PDF, размер каждого файла - 10-25 МБ. Общий размер папки - 2 ГБ.Как улучшить производительность, чтобы прочитать файл в папке tar.gz?

. . .

. Как повысить производительность чтения файлов в формате unzip. ?

FileInputStream fin = new FileInputStream(tarName); 
BufferedInputStream in = new BufferedInputStream(fin); 
GzipCompressorInputStream gzIn = new GzipCompressorInputStream(in); 
TarArchiveInputStream tarIn = new TarArchiveInputStream(gzIn); 
TarArchiveInputStream tarIn1 = new TarArchiveInputStream(tarIn); 
TarArchiveEntry entry = null; 

byte[] buffer = new byte[5024]; 
int nrBytesRead; 

while ((entry = (TarArchiveEntry) tarIn1.getNextEntry()) != null) { 
    System.out.println("it finds a file " 
         + entry.getName().toString()); 
    if (entry.getName().toString().equals(fileName)) { 

     while ((nrBytesRead = tarIn1.read(buffer)) > 0) { 

      out.write(buffer, 0, nrBytesRead); 
     } 
     break; 
    } 
} 

ответ

1

Формат tar.gz не предназначен для случайного доступа. Он предназначался для того, чтобы весь пакет был распакован сразу. Это позволяет сжимать ряд файлов в виде единого потока, как правило, улучшая сжатие, особенно для многих небольших файлов. Однако, если вы попытаетесь вытащить только один файл из середины где-нибудь, вам нужно сначала распаковать все файлы до этой точки.

Для случайного доступа к отдельным файлам следует рассмотреть возможность переупаковки с использованием формата zip. Сжатие будет не так хорошо, вы можете очень быстро вырвать отдельные файлы. В Java посмотрите на ZipFile class.

+0

дайте мне пример кода для произвольного доступа к файлу в формате zip –

+0

как получить произвольный доступ к Zip-формату –