Сжатие и копирование файлов NIO GZIP

Я использовал FileChannel и FileInputStream для простого копирования файлов из File fromFile в File toFile.

Код в основном такой:

source = new FileInputStream(fromFile).getChannel();
destination = new FileOutputStream(toFile, false).getChannel(); // overwrite
destination.transferFrom(source, 0, source.size());

где fromFile и toFile являются правильными File объектами. Теперь, вместо прямого копирования из fromFile, я хотел сжать его содержимое с помощью GZIP (есть в библиотеках Java), а затем скопировать в toFile. И наоборот, когда я возвращаюсь с toFile, я также хотел бы распаковать его.

Мне было интересно, есть ли простой способ, например

source = new GZIPCompressInputStream(new FileInputStream(fromFile)).getChannel();

or

source = new GZIPDecompressInputStream(new FileInputStream(fromFile)).getChannel();

и весь остальной код остается без изменений. Есть ли у вас какие-либо предложения по самому чистому решению этой проблемы?

Спасибо..


person bozeng    schedule 31.03.2015    source источник
comment
возможный дубликат Чтение файла GZIP из FileChannel (Java NIO)   -  person Bert Peters    schedule 31.03.2015


Ответы (1)


Вы можете обернуть FileInputStream в GZIPInputStream вот так:

InputStream input = new GZIPInputStream(yourCompressedInput);

Для сжатия при записи следует использовать GZIPOutputStream.

Удачи.

person Bert Peters    schedule 31.03.2015
comment
Нет, вы бы использовали каналы, чтобы получить поток. Но опять же, этот вопрос является дубликатом stackoverflow.com/questions/3335969/. Вы можете найти ответ там. - person Bert Peters; 31.03.2015