(де) сжатие файлов с использованием NIO - PullRequest
3 голосов
/ 24 августа 2011

Во многих онлайн-примерах файлы (де) сжимаются в java с использованием закодированного буфера. Однако с NIO нет необходимости выбирать хороший размер буфера. Я нашел примеры для файлов и сокетов, но есть ли канал NIO для сжатого ввода (например, GZIPInputStream), так что вы можете просто использовать transferFrom вместо создания буфера byte[] самостоятельно?

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Вы можете использовать статические служебные методы в java.nio.channels.Channels для обтекания потоков в каналах и наоборот.

например. создать канал, с которого вы можете читать несжатые данные из сжатого файла gzip:

FileChannel fc = 
    new RandomAccessFile("input.gz", "r").getChannel();

ReadableByteChannel gzc = 
    Channels.newChannel(
            new GZIPInputStream(
                    Channels.newInputStream(fc)));
2 голосов
/ 24 августа 2011

Нет, специализированный канал ZIP еще не существует ... Я думаю, что вы можете сделать следующее. Используйте NIO для чтения с любого канала, который вы хотите сохранить в буфере. Затем извлеките байты, которые вы только что прочитали, из буфера в байтовый массив, оберните массив, используя ByteArrayInputStream, и передайте его в ZIPInputStream.

...