Класс 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 |
Смещение заголовка конца центрального каталога (END) для поля смещения первого заголовка CEN. |
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 | Модификатор и тип | Поле | Описание |
|---|---|---|
protected byte[] |
buf |
Входной буфер для распаковки. |
protected Inflater |
inf |
Декомпрессор для этого потока. |
protected int |
len |
Общее число байтов, прочитанных во входной буфер. |
Поля, объявленные в классе FilterInputStream
in | Модификатор и тип | Поле | Описание |
|---|---|---|
protected InputStream |
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 | Модификатор и тип | Метод | Описание |
|---|---|---|
protected void |
fill() |
Заполняет входной буфер дополнительными данными для распаковки. |
void |
mark |
Отмечает текущую позицию в этом входном потоке. |
boolean |
markSupported() |
Проверяет, поддерживает ли этот входной поток методы mark и reset. |
void |
reset() |
Перемещает этот поток в позицию, в которой он находился при последнем вызове метода mark для этого входного потока. |
Методы, объявленные в классе FilterInputStream
read | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
read |
Читает из этого входного потока в массив байтов до b.length байтов данных. |
Методы, объявленные в классе InputStream
nullInputStream | Модификатор и тип | Метод | Описание |
|---|---|---|
static InputStream |
nullInputStream() |
Возвращает новый InputStream, который не считывает байты. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, является ли другой объект «равным» этому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и будет удалена в одном из следующих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Будит один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Будит все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt, либо до истечения заданного промежутка реального времени. |
Подробное описание полей
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.