Класс ZipInputStream
- Все реализуемые интерфейсы:
-
Closeable,AutoCloseable
- Прямые известные подклассы:
JarInputStream
public class ZipInputStream extends InflaterInputStream
Чтение записей 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). |
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
Когда этот поток достигает конца потока, дальнейшие вызовы этого метода будут возвращать пустой массив байтов.
Обратите внимание, что этот метод предназначен для простых случаев, когда удобно считывать все байты в массив байтов. Он не предназначен для чтения потоков ввода с большим количеством данных.
Если при чтении из потока ввода произойдёт ошибка ввода-вывода, то она может произойти после чтения некоторых, но не всех байтов. Следовательно, поток ввода может не быть в конце потока и может находиться в несогласованном состоянии. Сильно рекомендуется незамедлительно закрыть поток, если произойдёт ошибка ввода-вывода.
- Переопределяет:
-
readAllBytesв классеInputStream - Возвращает:
- массив байтов, содержащий прочитанные из этого потока ввода байты
- Исключения:
-
OutOfMemoryError- если массив требуемого размера не может быть выделен. -
IOException- если произошла ошибка ввода-вывода - С:
- 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:
-
NullPointerException- еслиbравноnull -
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:
-
NullPointerException- еслиoutравноnull -
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:
-
NullPointerException- еслиbравноnull. -
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:
Закрыть
public void close() throws IOException
- Определено в:
-
closeв интерфейсеAutoCloseable - Определено в:
-
closeв интерфейсеCloseable - Переопределяет:
-
closeв классеInflaterInputStream - Исключения:
-
IOException- если произошла ошибка ввода-вывода - См. также:
создатьZipEntry
protected ZipEntry createZipEntry(String name)
ZipEntry для указанного имени записи.- Параметры:
-
name- имя записи файла ZIP - Возвращает:
- созданный ZipEntry
© 1993, 2023, 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/21/docs/api/java.base/java/util/zip/ZipInputStream.html