Java Nio и FileInputStream - PullRequest
       11

Java Nio и FileInputStream

0 голосов
/ 16 мая 2011

В основном у меня есть этот код для распаковки некоторой строки, которая хранится в файле:

public static String decompressRawText(File inFile) {
    InputStream in = null;
    InputStreamReader isr = null;
    StringBuilder sb = new StringBuilder(STRING_SIZE);
    try {
        in = new FileInputStream(inFile);
        in = new BufferedInputStream(in, BUFFER_SIZE);
        in = new GZIPInputStream(in, BUFFER_SIZE);
        isr = new InputStreamReader(in);
        int length = 0;
        while ((length = isr.read(cbuf)) != -1) {
            sb.append(cbuf, 0, length);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }
    return sb.toString();
}

Поскольку физический ввод-вывод занимает довольно много времени, и поскольку мои сжатые версии файлов довольно малы (около 2 КБ из 2 М текста), я могу все же выполнить вышеизложенное, но для файла, который уже сопоставлен в память? возможно с помощью Java NIO? Спасибо

1 Ответ

1 голос
/ 16 мая 2011

Это не будет иметь никакого значения, по крайней мере, немного.В прошлый раз, когда я смотрел, сопоставленные файлы были примерно на 20% быстрее при вводе-выводе.Вам все еще нужно на самом деле сделать отображение ввода / вывода: просто сохраняет некоторые данные копирования.Я бы посмотрел на увеличение BUFFER_SIZE как минимум до 32к.Также размер cbuf, который должен быть локальной переменной в этом методе, а не переменной-членом, поэтому он будет поточно-ориентированным.Это может стоить , а не сжатие файлов с определенным пороговым размером, скажем, 10 КБ.

Также вы должны закрывать isr здесь, а не in.

может стоить попробовать поместить еще один BufferedInputStream поверх GZIPInputStream, а также тот, что под ним.Получите, чтобы сделать больше сразу.

...