Класс JarInputStream
- Все реализованные интерфейсы:
-
Closeable,AutoCloseable
public class JarInputStream extends ZipInputStream
JarInputStream, который расширяет ZipInputStream, используется для чтения содержимого файла JAR из потока ввода. Он предоставляет поддержку чтения необязательной записи Manifest. Manifest может использоваться для хранения метаданных о файле JAR и его записях. Если не указано иное, передача аргумента null в конструктор или метод в этом классе вызовет исключение NullPointerException.
Доступ к Manifest
Метод getManifest используется для возвращения Manifest из записи META-INF/MANIFEST.MF, если она является первой записью в потоке (или второй записью, если первая запись в потоке — META-INF/, а вторая — META-INF/MANIFEST.MF).
Методы getNextJarEntry() и getNextEntry() используются для чтения записей файла JAR из потока. Эти методы пропускают Manifest (META-INF/MANIFEST.MF), если он находится в начале потока. Другими словами, эти методы не возвращают запись для Manifest, если Manifest является первой записью в потоке. Если первая запись — META-INF/, а вторая — Manifest, то оба они пропускаются этими методами. Не определено, будут ли эти методы пропускать Manifest, если он появится позже в потоке.
Подписанные JAR-файлы
Подписанный JAR-файл проверяет подписи записей в Подписанном 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). |
Поля, объявленные в классе java.util.zip.InflaterInputStream
buf, inf, len
Поля, объявленные в классе java.io.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-файла в массив байтов, возвращая количество распакованных байтов. |
Методы, объявленные в классе java.util.zip.ZipInputStream
available, close, closeEntry, read, readAllBytes, readNBytes, readNBytes, skip, skipNBytes, transferTo
Методы, объявленные в классе 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
- См. также:
Подробное описание конструкторов
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 подписаны неверно.
чтение
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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/jar/JarInputStream.html