Попробуйте удалить , вернуть в теге формы и вернуть код состояния в функцию обратного вызова
.Необходимо использовать буферизацию. Запись маленьких частей данных будет неэффективной. Реализация сжатия находится в собственном коде в JDK солнца. Даже если бы это не была буферизированная производительность, то должен обычно превышать разумный файл или сеть I/O.
OutputStream out = new BufferedOutputStream(new GZIPOutputStream(rawOut));
InputStream in = new BufferedInputStream(new GZIPInputStream(rawIn));
Поскольку собственный код используется, чтобы реализовать распаковку/алгоритм сжатия, стараться очень близко для потока (и не только базового потока) после использования. Я нашел, что загрузки наличия бродящего вокруг 'Deflaters' очень плохи для производительности.
ZipInputStream
соглашения с архивами файлов, который является совершенно другой вещью от сжатия потока.
Для такого масштаба Вы могли бы хотеть пойти собственный компонент, предполагая, что Ваши требования платформы ограничены. Можно использовать JNI, чтобы назвать библиотеку или вызвать собственное использование команды ProcessBuilder
.
Когда Вы говорите это GZipInputStream
производительность была ужасна, Вы могли быть более конкретными? Вы узнавали, было ли это узким местом ЦП или узким местом ввода-вывода? Вы использовали буферизацию на обоих вводах и выводах? Если бы Вы могли бы отправить код, Вы использовали, который был бы очень полезен.
Если Вы находитесь на многоядерной машине, Вы могли бы попытаться все еще использовать GZipInputStream
но с помощью нескольких потоков, один на ядро, с общей очередью файлов все еще для обработки. (Любой файл был бы только обработан единственным потоком.), Который мог бы сделать вещи хуже, если Вы - связанный ввод-вывод, но это может стоить попытки.