[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-i-o-nio-kakie-klassy-podderzhivayut-chtenie-i-zapis-potokov-v-kompressirovannom-formate":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":18,"progress":19,"seo":20},678,"kakie-klassy-podderzhivayut-chtenie-i-zapis-potokov-v-kompressirovannom-formate",15,"i-o-nio","I\u002FO & NIO","📁","Какие классы поддерживают чтение и запись потоков в компрессированном формате?","Java предоставляет классы для работы со сжатыми данными в пакете `java.util.zip`. Они реализованы как потоки-обёртки (паттерн Декоратор) и поддерживают три формата сжатия.\n\n### Формат ZIP\n\n| Класс | Назначение |\n|---|---|\n| `ZipOutputStream` | Запись данных в формате ZIP (поддерживает множество файлов в одном архиве) |\n| `ZipInputStream` | Чтение данных из формата ZIP |\n\n### Формат GZIP\n\n| Класс | Назначение |\n|---|---|\n| `GZIPOutputStream` | Сжатие потока в формате GZIP (один файл\u002Fпоток) |\n| `GZIPInputStream` | Распаковка потока из формата GZIP |\n\n### Формат Deflate (низкоуровневый)\n\n| Класс | Назначение |\n|---|---|\n| `DeflaterOutputStream` | Сжатие данных алгоритмом deflate |\n| `InflaterInputStream` | Распаковка данных алгоритмом deflate |\n| `Deflater` | Низкоуровневое сжатие в формате ZLIB |\n| `Inflater` | Низкоуровневая распаковка из формата ZLIB |\n\n`ZipOutputStream` и `GZIPOutputStream` наследуют `DeflaterOutputStream`, а `ZipInputStream` и `GZIPInputStream` — `InflaterInputStream`.\n\n### Пример: создание GZIP-архива\n\n```java\ntry (GZIPOutputStream gzip = new GZIPOutputStream(\n        new FileOutputStream(\"data.txt.gz\"))) {\n    Files.copy(Path.of(\"data.txt\"), gzip);\n}\n```\n\nZIP используется для архивирования нескольких файлов, GZIP — для сжатия одного потока данных (типичен в HTTP: заголовок `Content-Encoding: gzip`). В серверных приложениях `GZIPOutputStream` часто оборачивает HTTP-ответ для уменьшения трафика.\n\n> **На собеседовании:** назовите ZIP, GZIP и Deflate классы. Подчеркните, что ZIP — для архивов (несколько файлов), GZIP — для потоков (один файл). Упомяните их использование в HTTP-сжатии.","","middle",[15,16,17],"core","io","compression",[],null,{"title":21,"description":22,"ogTitle":21,"ogDescription":23,"keywords":24,"schemaAnswer":34,"featuredSnippetReady":35},"Классы для сжатия данных в Java — Gymterview","Классы java.util.zip: ZipOutputStream, GZIPOutputStream, DeflaterOutputStream и их аналоги для чтения. Форматы ZIP, GZIP, Deflate. HTTP-сжатие.","ZIP, GZIP, Deflate: классы для сжатия и распаковки потоков данных из пакета java.util.zip.",[25,26,27,28,29,30,31,32,33],"ZipOutputStream","GZIPOutputStream","DeflaterOutputStream","ZipInputStream","GZIPInputStream","InflaterInputStream","сжатие","java.util.zip","собеседование","Пакет java.util.zip: ZIP — ZipOutputStream\u002FZipInputStream (архивы с несколькими файлами), GZIP — GZIPOutputStream\u002FGZIPInputStream (сжатие одного потока, используется в HTTP), Deflate — DeflaterOutputStream\u002FInflaterInputStream (низкоуровневое сжатие). ZIP и GZIP классы наследуют Deflater\u002FInflater. Все работают как обёртки (паттерн Декоратор).",true]