Класс 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 | Модификатор и тип | Поле | Описание |
|---|---|---|
protected byte[] |
buf |
Входной буфер для распаковки. |
protected Inflater |
inf |
Распаковщик для этого потока. |
protected int |
len |
Общее количество байтов, прочитанных во входной буфер. |
Поля, объявленные в классе FilterInputStream
in | Модификатор и тип | Поле | Описание |
|---|---|---|
protected InputStream |
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 | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
available() |
Возвращает 0, если обнаружен конец потока для текущей записи ZIP или для текущей записи ZIP был вызван метод ZipInputStream.closeEntry(); в противном случае возвращает 1. |
void |
close() |
Закрывает этот входной поток и освобождает связанные с ним системные ресурсы. |
void |
closeEntry() |
Закрывает текущую запись 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
- См. также:
Подробное описание конструкторов
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.