Компрессия
Библиотека ввода/вывода Java содержит классы, поддерживающие чтение и запись потоков в компрессированном формате. Они являются оберткой для существующих классов ввода/вывода для обеспечения возможности компрессирования.
Эти классы не наследуются от классов Reader и Writer, а вместо этого они являются частью иерархии InputStream и OutputStream. Это происходит потому, что библиотека компрессии работает с байтами, а не с символами. Однако вы можете иногда встретить необходимость смешивания двух типов потоков. (Помните, что вы можете использовать InputStreamReader и OutputStreamWriter для обеспечения простой конвертации одного типа в другой.)
| CheckedInputStream | GetCheckSum( ) производит контрольную сумму для любого InputStream (только не декомпрессию). | 
| CheckedOutputStream | GetCheckSum( ) производит контрольную сумму для любого OutputStream (только не декомпрессию). | 
| DeflaterOutputStream | Базовый класс для классов компрессии. | 
| ZipOutputStream | DeflaterOutputStream, который компрессирует данные в файл формата Zip. | 
| GZIPOutputStream | DeflaterOutputStream, который компрессирует данные в файл формата GZIP. | 
| InflaterInputStream | Базовый класс для классов декомпрессии. | 
| ZipInputStream | InflaterInputStream, который декомпрессирует данные, хранящиеся в файле формата Zip. | 
| GZIPInputStream | InflaterInputStream, который декомпрессирует данные, хранящиеся в файле формата GZIP. | 
Хотя существует много алгоритмов компрессии, Zip и GZIP, вероятно, наиболее часто используемые. Поэтому вы можете легко манипулировать вашими компрессированными данными с помощью многих инструментов, существующих для чтения и записи этих форматов.