Класс ZipInputStream
- Все реализуемые интерфейсы:
Closeable, AutoCloseable
- Прямые известные подклассы:
JarInputStream
public class ZipInputStream extends InflaterInputStream
Если не указано иное, передача аргумента null конструктору или методу этого класса приведет к выбросу исключения NullPointerException.
Чтение записей ZIP-файла
МетодgetNextEntry() используется для чтения следующей записи ZIP-файла (записи заголовка локального файла (LOC) в формате ZIP) и перемещения потока к данным файла этой записи. Данные файла можно прочитать с помощью одного из методов чтения ZipInputStream, таких как read или readAllBytes(). Например: Path jar = Path.of("foo.jar");
try (InputStream is = Files.newInputStream(jar);
ZipInputStream zis = new ZipInputStream(is)) {
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
var bytes = zis.readAllBytes();
System.out.printf("Entry: %s, bytes read: %s%n", ze.getName(),
bytes.length);
}
}
- Примечание к API:
- Заголовок LOC содержит метаданные о записи ZIP-файла.
ZipInputStreamне читает заголовок центрального каталога (CEN) для этой записи и поэтому не имеет доступа к таким ее метаданным, как внешние атрибуты файла. Если требуется информация, хранящаяся в заголовке CEN, можно использовать ZipFile. - С версии:
- 1.1
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
CENATT |
Смещение поля внутренних атрибутов файла в заголовке центрального каталога (CEN). |
static final int |
CENATX |
Смещение поля внешних атрибутов файла в заголовке центрального каталога (CEN). |
static final int |
CENCOM |
Смещение поля длины комментария в заголовке центрального каталога (CEN). |
static final int |
CENCRC |
Смещение поля значения CRC-32 несжатого файла в заголовке центрального каталога (CEN). |
static final int |
CENDSK |
Смещение поля начального номера диска в заголовке центрального каталога (CEN). |
static final int |
CENEXT |
Смещение поля длины дополнительных данных в заголовке центрального каталога (CEN). |
static final int |
CENFLG |
Смещение поля флагов шифрования и расшифрования в заголовке центрального каталога (CEN). |
static final int |
CENHDR |
Размер заголовка центрального каталога (CEN) в байтах (включая сигнатуру). |
static final int |
CENHOW |
Смещение поля метода сжатия в заголовке центрального каталога (CEN). |
static final int |
CENLEN |
Смещение поля размера несжатых данных в заголовке центрального каталога (CEN). |
static final int |
CENNAM |
Смещение поля длины имени файла в заголовке центрального каталога (CEN). |
static final int |
CENOFF |
Смещение поля смещения заголовка LOC в заголовке центрального каталога (CEN). |
static final long |
CENSIG |
Сигнатура заголовка центрального каталога (CEN). |
static final int |
CENSIZ |
Смещение поля размера сжатых данных в заголовке центрального каталога (CEN). |
static final int |
CENTIM |
Смещение поля времени изменения в заголовке центрального каталога (CEN). |
static final int |
CENVEM |
Смещение поля версии создавшего заголовок в заголовке центрального каталога (CEN). |
static final int |
CENVER |
Смещение поля версии, необходимой для извлечения, в заголовке центрального каталога (CEN). |
static final int |
ENDCOM |
Смещение поля длины комментария ZIP-файла в заголовке конца центрального каталога (END). |
static final int |
ENDHDR |
Размер заголовка конца центрального каталога (END) в байтах (включая сигнатуру). |
static final int |
ENDOFF |
Смещение поля смещения первого заголовка CEN в заголовке конца центрального каталога (END). |
static final long |
ENDSIG |
Сигнатура заголовка конца центрального каталога (END). |
static final int |
ENDSIZ |
Смещение поля размера центрального каталога в байтах в заголовке конца центрального каталога (END). |
static final int |
ENDSUB |
Смещение поля количества записей на этом диске в заголовке конца центрального каталога (END). |
static final int |
ENDTOT |
Смещение поля общего количества записей в заголовке конца центрального каталога (END). |
static final int |
EXTCRC |
Смещение поля значения CRC-32 несжатого файла в дополнительном локальном заголовке (EXT). |
static final int |
EXTHDR |
Размер дополнительного локального заголовка (EXT) в байтах (включая сигнатуру). |
static final int |
EXTLEN |
Смещение поля размера несжатых данных в дополнительном локальном заголовке (EXT). |
static final long |
EXTSIG |
Сигнатура дополнительного локального заголовка (EXT). |
static final int |
EXTSIZ |
Смещение поля размера сжатых данных в дополнительном локальном заголовке (EXT). |
static final int |
LOCCRC |
Смещение поля значения CRC-32 несжатого файла в заголовке локального файла (LOC). |
static final int |
LOCEXT |
Смещение поля длины дополнительных данных в заголовке локального файла (LOC). |
static final int |
LOCFLG |
Смещение поля флагов общего назначения в заголовке локального файла (LOC). |
static final int |
LOCHDR |
Размер заголовка локального файла (LOC) в байтах (включая сигнатуру). |
static final int |
LOCHOW |
Смещение поля метода сжатия в заголовке локального файла (LOC). |
static final int |
LOCLEN |
Смещение поля размера несжатых данных в заголовке локального файла (LOC). |
static final int |
LOCNAM |
Смещение поля длины имени файла в заголовке локального файла (LOC). |
static final long |
LOCSIG |
Сигнатура заголовка локального файла (LOC). |
static final int |
LOCSIZ |
Смещение поля размера сжатых данных в заголовке локального файла (LOC). |
static final int |
LOCTIM |
Смещение поля времени изменения в заголовке локального файла (LOC). |
static final int |
LOCVER |
Смещение поля версии, необходимой для извлечения, в заголовке локального файла (LOC). |
Поля, объявленные в классе InflaterInputStream
buf, inf, len
Поля, объявленные в классе FilterInputStream
in
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ZipInputStream |
Создает новый входной поток ZIP. |
ZipInputStream |
Создает новый входной поток ZIP. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
available() |
Возвращает 0, если обнаружен конец потока для текущей записи ZIP или для текущей записи ZIP был вызван метод closeEntry(); в противном случае возвращает 1. |
void |
close() |
Закрывает этот входной поток и освобождает все системные ресурсы, связанные с потоком. |
void |
closeEntry() |
Закрывает текущую запись ZIP и перемещает поток для чтения следующей записи. |
protected ZipEntry |
createZipEntry |
Создает новый объект ZipEntry для указанного имени записи. |
ZipEntry |
getNextEntry() |
Читает следующую запись ZIP-файла и перемещает поток к началу данных записи. |
int |
read() |
Читает следующий байт данных из входного потока для текущей записи ZIP. |
int |
read |
Читает запрошенное количество байтов из входного потока в указанный массив байтов для текущей записи ZIP и возвращает количество распакованных байтов. |
byte[] |
readAllBytes() |
Читает все оставшиеся байты из входного потока для текущей записи ZIP. |
int |
readNBytes |
Читает запрошенное количество байтов из входного потока в указанный массив байтов для текущей записи ZIP и возвращает количество распакованных байтов. |
byte[] |
readNBytes |
Читает из входного потока до указанного количества байтов для текущей записи ZIP. |
long |
skip |
Пропускает и отбрасывает n байтов данных из этого входного потока для текущей записи ZIP. |
void |
skipNBytes |
Пропускает и отбрасывает ровно n байтов данных из этого входного потока для текущей записи ZIP. |
long |
transferTo |
Читает все байты из этого входного потока для текущей записи ZIP и записывает их в указанный выходной поток в порядке чтения. |
Методы, объявленные в классе InflaterInputStream
fill, mark, markSupported, reset
Методы, объявленные в классе FilterInputStream
read
Методы, объявленные в классе InputStream
nullInputStream
Подробное описание полей
LOCSIG
static final long LOCSIG
- См. также:
EXTSIG
static final long EXTSIG
- См. также:
CENSIG
static final long CENSIG
- См. также:
ENDSIG
static final long ENDSIG
- См. также:
LOCHDR
static final int LOCHDR
- См. также:
EXTHDR
static final int EXTHDR
- См. также:
CENHDR
static final int CENHDR
- См. также:
ENDHDR
static final int ENDHDR
- См. также:
LOCVER
static final int LOCVER
- См. также:
LOCFLG
static final int LOCFLG
- См. также:
LOCHOW
static final int LOCHOW
- См. также:
LOCTIM
static final int LOCTIM
- См. также:
LOCCRC
static final int LOCCRC
- См. также:
LOCSIZ
static final int LOCSIZ
- См. также:
LOCLEN
static final int LOCLEN
- См. также:
LOCNAM
static final int LOCNAM
- См. также:
LOCEXT
static final int LOCEXT
- См. также:
EXTCRC
static final int EXTCRC
- См. также:
EXTSIZ
static final int EXTSIZ
- См. также:
EXTLEN
static final int EXTLEN
- См. также:
CENVEM
static final int CENVEM
- См. также:
CENVER
static final int CENVER
- См. также:
CENFLG
static final int CENFLG
- См. также:
CENHOW
static final int CENHOW
- См. также:
CENTIM
static final int CENTIM
- См. также:
CENCRC
static final int CENCRC
- См. также:
CENSIZ
static final int CENSIZ
- См. также:
CENLEN
static final int CENLEN
- См. также:
CENNAM
static final int CENNAM
- См. также:
CENEXT
static final int CENEXT
- См. также:
CENCOM
static final int CENCOM
- См. также:
CENDSK
static final int CENDSK
- См. также:
CENATT
static final int CENATT
- См. также:
CENATX
static final int CENATX
- См. также:
CENOFF
static final int CENOFF
- См. также:
ENDSUB
static final int ENDSUB
- См. также:
ENDTOT
static final int ENDTOT
- См. также:
ENDSIZ
static final int ENDSIZ
- См. также:
ENDOFF
static final int ENDOFF
- См. также:
ENDCOM
static final int ENDCOM
- См. также:
Подробное описание конструкторов
ZipInputStream
public ZipInputStream(InputStream in)
Для декодирования имен записей используется charset UTF-8.
- Параметры:
-
in— фактический входной поток
ZipInputStream
public ZipInputStream(InputStream in, Charset charset)
- Параметры:
-
in— фактический входной поток -
charset— кодировка, используемая для декодирования имени записи ZIP (игнорируется, если установлен бит кодировки языка флага общего назначения записи ZIP). - Начиная с версии:
- 1.7
Подробное описание методов
getNextEntry
public ZipEntry getNextEntry() throws IOException
- Возвращает:
- следующую запись ZIP-файла или null, если записей больше нет
- Вызывает:
-
ZipException— если произошла ошибка ZIP-файла -
IOException— если произошла ошибка ввода-вывода
closeEntry
public void closeEntry() throws IOException
- Вызывает:
-
ZipException— если произошла ошибка ZIP-файла -
IOException— если произошла ошибка ввода-вывода
available
public int available() throws IOException
closeEntry(); в противном случае возвращает 1. Программы не должны рассчитывать на то, что этот метод вернет фактическое количество байтов, которые можно прочитать без блокировки.
- Переопределяет:
-
availableв классеInflaterInputStream - Возвращает:
- 0, если обнаружен конец потока для текущей записи ZIP или для текущей записи ZIP был вызван метод
closeEntry(); в противном случае 1. - Вызывает:
-
IOException— если возникает ошибка ввода-вывода.
read
public int read() throws IOException
- Переопределяет:
-
readв классеInflaterInputStream - Возвращает:
- прочитанный байт или -1, если достигнут конец потока
- Вызывает:
-
IOException— если произошла ошибка ввода-вывода - См. также:
readAllBytes
public byte[] readAllBytes() throws IOException
Когда этот поток достигает конца, последующие вызовы этого метода возвращают пустой массив байтов.
Обратите внимание: этот метод предназначен для простых случаев, когда удобно прочитать все байты в массив байтов. Он не предназначен для чтения входных потоков с большим объемом данных.
Если при чтении из входного потока возникает ошибка ввода-вывода, она может произойти после чтения части, но не всех байтов. В результате входной поток может не достичь конца и оказаться в несогласованном состоянии. Настоятельно рекомендуется сразу закрыть поток, если произошла ошибка ввода-вывода.
- Переопределяет:
-
readAllBytesв классеInputStream - Возвращает:
- массив байтов, содержащий байты, прочитанные из этого входного потока
- Вызывает:
-
OutOfMemoryError— если невозможно выделить массив требуемого размера. -
IOException— если возникает ошибка ввода-вывода - Начиная с версии:
- 9
readNBytes
public byte[] readNBytes(int len) throws IOException
Длина возвращенного массива равна количеству байтов, прочитанных из потока. Если len равно нулю, байты не читаются и возвращается пустой массив байтов. В противном случае из потока читается не более len байтов. Если достигнут конец потока, может быть прочитано меньше len байтов.
Когда этот поток достигает конца, последующие вызовы этого метода возвращают пустой массив байтов.
Обратите внимание: этот метод предназначен для простых случаев, когда удобно прочитать указанное количество байтов в массив байтов. Общий объем памяти, выделяемой этим методом, пропорционален количеству байтов, прочитанных из потока, и ограничен значением len. Поэтому метод можно безопасно вызывать с очень большими значениями len при условии, что доступно достаточно памяти.
Если при чтении из входного потока возникает ошибка ввода-вывода, она может произойти после чтения части, но не всех байтов. В результате входной поток может не достичь конца и оказаться в несогласованном состоянии. Настоятельно рекомендуется сразу закрыть поток, если произошла ошибка ввода-вывода.
- Переопределяет:
-
readNBytesв классеInputStream - Примечание по реализации:
- Этот метод вызывает
super.readNBytes(int len). - Параметры:
-
len— максимальное количество байтов для чтения - Возвращает:
- массив байтов, содержащий байты, прочитанные из этого входного потока
- Вызывает:
-
OutOfMemoryError— если невозможно выделить массив требуемого размера. -
IOException— если возникает ошибка ввода-вывода - Начиная с версии:
- 11
readNBytes
public int readNBytes(byte[] b, int off, int len) throws IOException
len байтов входных данных, не будет обнаружен конец потока либо не будет выброшено исключение. Возвращается фактическое количество прочитанных байтов, которое может быть равно нулю. Этот метод не закрывает входной поток. Если конец потока достигнут до чтения len байтов, будет возвращено фактическое количество прочитанных байтов. Когда этот поток достигает конца, последующие вызовы этого метода возвращают ноль.
Если len равно нулю, байты не читаются и возвращается 0; в противном случае выполняется попытка прочитать до len байтов.
Первый прочитанный байт сохраняется в элементе b[off], следующий — в b[off+1] и так далее. Количество прочитанных байтов не превышает len. Пусть k — фактическое количество прочитанных байтов; эти байты сохраняются в элементах с b[off] по b[off+k-1], а элементы с b[off+k ] по b[off+len-1] остаются без изменений.
Если при чтении из входного потока возникает ошибка ввода-вывода, она может произойти после обновления данными из входного потока части, но не всех байтов b. В результате входной поток и b могут оказаться в несогласованном состоянии. Настоятельно рекомендуется сразу закрыть поток, если произошла ошибка ввода-вывода.
- Переопределяет:
-
readNBytesв классеInputStream - Параметры:
-
b— массив байтов, в который считываются данные -
off— начальное смещение вb, по которому записываются данные -
len— максимальное количество байтов для чтения - Возвращает:
- фактическое количество байтов, прочитанных в буфер
- Вызывает:
-
IndexOutOfBoundsException— еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off -
IOException— если возникает ошибка ввода-вывода - Начиная с версии:
- 9
skipNBytes
public void skipNBytes(long n) throws IOException
n байтов данных из этого входного потока для текущей записи ZIP. Если n равно нулю, байты не пропускаются. Если n отрицательно, байты не пропускаются. Подклассы могут обрабатывать отрицательное значение иначе. Этот метод блокируется до тех пор, пока не будет пропущено запрошенное количество байтов, не будет достигнут конец файла либо не будет выброшено исключение.
Если конец потока достигнут до того, как поток окажется в нужной позиции, выбрасывается EOFException.
Если возникает ошибка ввода-вывода, входной поток может оказаться в несогласованном состоянии. Настоятельно рекомендуется сразу закрыть поток, если произошла ошибка ввода-вывода.
- Переопределяет:
-
skipNBytesв классеInputStream - Параметры:
-
n— количество байтов, которые нужно пропустить. - Вызывает:
-
IOException— если не удается правильно установить позицию потока или возникает ошибка ввода-вывода. - Начиная с версии:
- 12
- См. также:
transferTo
public long transferTo(OutputStream out) throws IOException
Этот метод может блокироваться неограниченно долго при чтении из входного потока или записи в выходной поток. Поведение при асинхронном закрытии входного и/или выходного потока или прерывании потока выполнения во время передачи зависит от конкретных входного и выходного потоков и потому не определено.
Если общее количество переданных байтов превышает Long.MAX_VALUE, будет возвращено значение Long.MAX_VALUE.
Если при чтении из входного потока или записи в выходной поток возникает ошибка ввода-вывода, она может произойти после чтения или записи части байтов. В результате входной поток может не достичь конца, а один или оба потока могут оказаться в несогласованном состоянии. Настоятельно рекомендуется сразу закрыть оба потока, если произошла ошибка ввода-вывода.
- Переопределяет:
-
transferToв классеInputStream - Параметры:
-
out— выходной поток, не равный null - Возвращает:
- количество переданных байтов
- Вызывает:
-
IOException— если при чтении или записи возникает ошибка ввода-вывода - Начиная с версии:
- 9
read
public int read(byte[] b, int off, int len) throws IOException
len не равно нулю, метод блокирует выполнение, пока не появятся входные данные; в противном случае байты не считываются и возвращается 0. Если текущая запись сжата и этот метод возвращает ненулое целое число n, то buf[off] по buf[off+n-1] содержат несжатые данные. Содержимое элементов от buf[off+n] до buf[off+len-1] не определено, в отличие от спецификации суперкласса InputStream, поэтому реализация может изменять эти элементы в процессе распаковки. Если этот метод возвращает -1 или выбрасывает исключение, содержимое от buf[off] до buf[off+len
-1] не определено.
- Переопределяет:
-
readв классеInflaterInputStream - Параметры:
-
b— буфер, в который считываются данные -
off— начальное смещение в массиве назначенияb -
len— максимальное количество считываемых байтов - Возвращает:
- фактическое количество считанных байтов или -1, если достигнут конец записи
- Выбрасывает:
-
IndexOutOfBoundsException— еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off -
ZipException— если произошла ошибка файла ZIP -
IOException— если произошла ошибка ввода-вывода - См. также:
skip
public long skip(long n) throws IOException
n байт данных из этого входного потока для текущей записи ZIP.- Переопределяет:
-
skipв классеInflaterInputStream - Параметры:
-
n— количество байтов для пропуска - Возвращает:
- фактическое количество пропущенных байтов
- Выбрасывает:
-
ZipException— если произошла ошибка файла ZIP -
IOException— если произошла ошибка ввода-вывода -
IllegalArgumentException— еслиn < 0 - См. также:
close
public void close() throws IOException
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Переопределяет:
-
closeв классеInflaterInputStream - Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода - См. также:
createZipEntry
protected ZipEntry createZipEntry(String name)
ZipEntry для указанного имени записи.- Параметры:
-
name— имя записи в ZIP-файле - Возвращает:
- созданный объект ZipEntry
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/zip/ZipInputStream.html