Класс JarInputStream
- Все реализованные интерфейсы:
Closeable, AutoCloseable
public class JarInputStream extends ZipInputStream
JarInputStream, расширяющий ZipInputStream, используется для чтения содержимого JAR-файла из входного потока. Он поддерживает чтение необязательной записи манифеста. Manifest можно использовать для хранения метаинформации о JAR-файле и его записях. Если не указано иное, передача аргумента null конструктору или методу этого класса приводит к выбрасыванию исключения NullPointerException.
Доступ к манифесту
Метод getManifest используется для возврата манифеста из записи META-INF/MANIFEST.MF, если она является первой записью в потоке (или второй записью, если первая запись в потоке — META-INF/, а вторая — META-INF/MANIFEST.MF).
Методы getNextJarEntry() и getNextEntry() используются для чтения записей JAR-файла из потока. Эти методы пропускают манифест (META-INF/MANIFEST.MF), если он находится в начале потока. Иными словами, эти методы не возвращают запись манифеста, если манифест является первой записью в потоке. Если первая запись — META-INF/, а вторая — манифест, эти методы пропускают обе записи. Не определено, пропускают ли эти методы манифест, если он встречается позднее в потоке.
Подписанные JAR-файлы
JarInputStream проверяет подписи записей в подписанном JAR-файле в следующих случаях: -
Manifestявляется первой записью в потоке (или второй записью, если первая запись в потоке —META-INF/, а вторая —META-INF/MANIFEST.MF). - Все записи, связанные с подписями, следуют непосредственно за
Manifest
После полной проверки JarEntry, которая выполняется чтением до конца входного потока записи, можно вызвать JarEntry.getCertificates(), чтобы получить сертификаты этой записи, и JarEntry.getCodeSigners(), чтобы получить подписавших её лиц.
Важно отметить, что процесс проверки не включает проверку сертификата подписавшего лица. Вызывающему коду следует изучить возвращаемое значение JarEntry.getCodeSigners(), чтобы дополнительно определить, можно ли доверять подписи.
- Примечание к API:
- Если
JarEntryизменён после подписания JAR-файла, при чтении записи будет выброшено исключениеSecurityException. - С момента версии:
- 1.2
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
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
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
JarInputStream |
Создаёт новый JarInputStream и считывает необязательный манифест. |
JarInputStream |
Создаёт новый JarInputStream и считывает необязательный манифест. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected ZipEntry |
createZipEntry |
Создаёт новую запись JarEntry (ZipEntry) для указанного имени записи JAR-файла. |
Manifest |
getManifest() |
Возвращает Manifest для этого JAR-файла, если он является первой записью в потоке (или второй записью, если первая запись в потоке — META-INF/, а вторая — META-INF/MANIFEST.MF); в противном случае возвращает null. |
ZipEntry |
getNextEntry() |
Считывает следующую запись ZIP-файла и устанавливает позицию потока в начало данных этой записи. |
JarEntry |
getNextJarEntry() |
Считывает следующую запись JAR-файла и устанавливает позицию потока в начало данных этой записи. |
int |
read |
Считывает данные из текущей записи JAR в массив байтов и возвращает количество распакованных байтов. |
Методы, объявленные в классе ZipInputStream
available, close, closeEntry, read, readAllBytes, readNBytes, readNBytes, skip, skipNBytes, transferTo
Методы, объявленные в классе 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
- См. также:
Подробное описание конструкторов
JarInputStream
public JarInputStream(InputStream in) throws IOException
JarInputStream и считывает необязательный манифест. Если манифест присутствует, также пытается проверить подписи, если JarInputStream подписан.- Параметры:
-
in— фактический входной поток - Исключения:
-
IOException— если произошла ошибка ввода-вывода
JarInputStream
public JarInputStream(InputStream in, boolean verify) throws IOException
JarInputStream и считывает необязательный манифест. Если манифест присутствует и параметр verify имеет значение true, также пытается проверить подписи, если JarInputStream подписан.- Параметры:
-
in— фактический входной поток -
verify— следует ли проверять подписи JarInputStream, если он подписан. - Исключения:
-
IOException— если произошла ошибка ввода-вывода
Подробное описание методов
getManifest
public Manifest getManifest()
Manifest для этого JAR-файла, если он является первой записью в потоке (или второй записью, если первая запись в потоке — META-INF/, а вторая — META-INF/MANIFEST.MF), или null в противном случае.- Возвращает:
Manifestдля этого JAR-файла илиnullв противном случае.
getNextEntry
public ZipEntry getNextEntry() throws IOException
- Переопределяет:
-
getNextEntryв классеZipInputStream - Возвращает:
- следующую запись ZIP-файла или null, если записей больше нет
- Исключения:
-
ZipException— если произошла ошибка ZIP-файла -
IOException— если произошла ошибка ввода-вывода -
SecurityException— если подпись какой-либо записи JAR-файла недействительна.
getNextJarEntry
public JarEntry getNextJarEntry() throws IOException
- Возвращает:
- следующую запись JAR-файла или null, если записей больше нет
- Исключения:
-
ZipException— если произошла ошибка ZIP-файла -
IOException— если произошла ошибка ввода-вывода -
SecurityException— если подпись какой-либо записи JAR-файла недействительна.
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в классеZipInputStream - Параметры:
-
b— буфер, в который считываются данные -
off— начальное смещение в целевом массивеb -
len— максимальное количество байтов для считывания - Возвращает:
- фактическое количество считанных байтов или -1, если достигнут конец записи
- Исключения:
-
IndexOutOfBoundsException— еслиoffотрицательно,lenотрицательно илиlenбольшеb.length - off -
ZipException— если произошла ошибка ZIP-файла -
IOException— если произошла ошибка ввода-вывода -
SecurityException— если подпись какой-либо записи JAR-файла недействительна. - См. также:
createZipEntry
protected ZipEntry createZipEntry(String name)
JarEntry (ZipEntry) для указанного имени записи JAR-файла. Атрибуты манифеста указанной записи JAR-файла копируются в новую JarEntry.- Переопределяет:
-
createZipEntryв классеZipInputStream - Параметры:
-
name— имя записи JAR/ZIP-файла - Возвращает:
- только что созданный объект
JarEntry
© 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/jar/JarInputStream.html