Класс 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) для записи и, следовательно, не будет иметь доступа к его метаданным, таким как внешние атрибуты файла. ZipFile может быть использован, когда необходима информация, хранящаяся в заголовке CEN. - С:
- 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). |
Поля, объявленные в классе java.util.zip.InflaterInputStream
buf, inf, len
Поля, объявленные в классе java.io.FilterInputStream
in
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ZipInputStream |
Создаёт новый поток ввода ZIP. |
ZipInputStream |
Создаёт новый поток ввода ZIP. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int |
available() |
Возвращает 0, когда обнаружен конец потока для текущей ZIP-записи или метод closeEntry() был вызван для текущей ZIP-записи, в противном случае возвращает 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-записи и записывает байты в указанный поток вывода в порядке их чтения. |
Методы, объявленные в классе java.util.zip.InflaterInputStream
fill, mark, markSupported, reset
Методы, объявленные в классе java.io.FilterInputStream
read
Методы, объявленные в классе java.io.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)
Используется 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() был вызван для текущей ZIP-записи; в противном случае возвращает 1. Программы не должны полагаться на этот метод для возврата фактического количества байтов, которые можно прочитать без блокировки.
- Переопределяет:
-
availableв классеInflaterInputStream - Возвращает:
- 0, когда обнаружен конец потока для текущей ZIP-записи или
closeEntry()был вызван для текущей ZIP-записи; в противном случае 1. - Исключения:
-
IOException- если произошла ошибка ввода/вывода.
read
public int read() throws IOException
- Переопределяет:
-
readв классеInflaterInputStream - Возвращает:
- прочитанный байт или -1, если достигнут конец потока
- Исключения:
-
IOException- если произошла ошибка ввода/вывода - См. также:
readAllBytes
public byte[] readAllBytes() throws IOException
Когда этот поток достигает конца потока, последующие вызовы этого метода будут возвращать пустой массив байтов.
Обратите внимание, что этот метод предназначен для простых случаев, когда удобно считать все байты в массив байтов. Он не предназначен для чтения входных потоков с большими объемами данных.
Если при чтении из входного потока произошла ошибка ввода-вывода, то это может произойти после чтения некоторых, но не всех байтов. Следовательно, входной поток может не быть в конце потока и может находиться в несогласованном состоянии. Сильно рекомендуется немедленно закрыть поток, если произошла ошибка ввода-вывода.
- Overrides:
-
readAllBytesв классеInputStream - Returns:
- массив байтов, содержащий прочитанные из этого входного потока байты
- Throws:
-
OutOfMemoryError- если нельзя выделить массив требуемого размера. -
IOException- если произошла ошибка ввода-вывода - Since:
- 9
readNBytes
public byte[] readNBytes(int len) throws IOException
Длина возвращаемого массива равна количеству байтов, прочитанных из потока. Если len равно нулю, то байты не считываются, и возвращается пустой массив байтов. В противном случае из потока считывается до len байтов. Может быть прочитано меньше len байтов, если обнаружен конец потока.
Когда этот поток достигает конца потока, последующие вызовы этого метода будут возвращать пустой массив байтов.
Обратите внимание, что этот метод предназначен для простых случаев, когда удобно считать указанное количество байтов в массив байтов. Общий объем памяти, выделенный этим методом, пропорционален количеству байтов, прочитанных из потока, который ограничен len. Следовательно, метод можно безопасно вызывать с очень большими значениями len при условии наличия достаточной памяти.
Если при чтении из входного потока произошла ошибка ввода-вывода, то это может произойти после чтения некоторых, но не всех байтов. Следовательно, входной поток может не быть в конце потока и может находиться в несогласованном состоянии. Сильно рекомендуется немедленно закрыть поток, если произошла ошибка ввода-вывода.
- Overrides:
-
readNBytesв классеInputStream - Implementation Note:
- Этот метод вызывает
super.readNBytes(int len). - Parameters:
-
len- максимальное количество байтов для чтения - Returns:
- массив байтов, содержащий прочитанные из этого входного потока байты
- Throws:
-
OutOfMemoryError- если нельзя выделить массив требуемого размера. -
IOException- если произошла ошибка ввода-вывода - Since:
- 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 могут находиться в несогласованном состоянии. Сильно рекомендуется немедленно закрыть поток, если произошла ошибка ввода-вывода.
- Overrides:
-
readNBytesв классеInputStream - Parameters:
-
b- массив байтов, в который считываются данные -
off- начальный смещение вb, в котором записываются данные -
len- максимальное количество байтов для чтения - Returns:
- фактическое количество байтов, прочитанных в буфер
- Throws:
-
IndexOutOfBoundsException- еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off -
IOException- если произошла ошибка ввода-вывода - Since:
- 9
skipNBytes
public void skipNBytes(long n) throws IOException
n байтов данных из этого входного потока для текущей записи ZIP. Если n равно нулю, то байты не пропускаются. Если n отрицательно, то байты не пропускаются. Подклассы могут обрабатывать отрицательное значение по-разному. Этот метод блокируется до тех пор, пока не будет пропущено затребованное количество байтов, не будет достигнут конец файла или не будет выброшено исключение.
Если конец потока достигнут до того, как поток достигнет желаемой позиции, то выбрасывается EOFException.
Если произошла ошибка ввода-вывода, то входной поток может находиться в несогласованном состоянии. Сильно рекомендуется немедленно закрыть поток, если произошла ошибка ввода-вывода.
- Overrides:
-
skipNBytesв классеInputStream - Parameters:
-
n- количество байтов, которые нужно пропустить. - Throws:
-
IOException- если поток не может быть переместить или если произошла ошибка ввода-вывода. - Since:
- 12
- See Also:
transferTo
public long transferTo(OutputStream out) throws IOException
Этот метод может блокироваться неопределённо, читая из входного потока или записывая в выходной поток. Поведение в случае, когда входной и/или выходной поток асинхронно закрывается или поток прерывается во время передачи, зависит от входного и выходного потоков и поэтому не определено.
Если общее количество переданных байтов больше Long.MAX_VALUE, то возвращается Long.MAX_VALUE.
Если при чтении из входного потока или записи в выходной поток произошла ошибка ввода-вывода, то это может произойти после чтения или записи некоторых байтов. Следовательно, входной поток может не быть в конце потока, и один или оба потока могут быть в несогласованном состоянии. Сильно рекомендуется немедленно закрыть оба потока, если произошла ошибка ввода-вывода.
- Overrides:
-
transferToв классеInputStream - Parameters:
-
out- выходной поток, не null - Returns:
- количество переданных байтов
- Throws:
-
IOException- если произошла ошибка ввода-вывода при чтении или записи - Since:
- 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] не определено.
- Overrides:
-
readв классеInflaterInputStream - Parameters:
-
b- буфер, в который считываются данные -
off- начальный смещение в целевом массивеb -
len- максимальное количество считанных байтов - Returns:
- фактическое количество прочитанных байтов или -1, если достигнут конец записи
- Throws:
-
IndexOutOfBoundsException- еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off -
ZipException- если произошла ошибка в ZIP-файле -
IOException- если произошла ошибка ввода-вывода - See Also:
skip
public long skip(long n) throws IOException
n байт данных из этого потока ввода для текущей записи ZIP.- Overrides:
-
skipв классеInflaterInputStream - Parameters:
-
n- количество байт, которые нужно пропустить - Returns:
- фактическое количество пропущенных байт
- Throws:
-
ZipException- если произошла ошибка в файле ZIP -
IOException- если произошла ошибка ввода-вывода -
IllegalArgumentException- еслиn < 0 - See Also:
close
public void close() throws IOException
- Specified by:
-
closeв интерфейсеAutoCloseable - Specified by:
-
closeв интерфейсеCloseable - Overrides:
-
closeв классеInflaterInputStream - Throws:
-
IOException- если произошла ошибка ввода-вывода - See Also:
createZipEntry
protected ZipEntry createZipEntry(String name)
ZipEntry для указанного имени записи.- Parameters:
-
name- имя записи файла ZIP - Returns:
- созданная запись 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/zip/ZipInputStream.html