java.lang.Object
java.io.InputStream
java.io.FilterInputStream
java.util.zip.InflaterInputStream
java.util.zip.ZipInputStream
java.util.jar.JarInputStream
- 所有已实现的接口:
-
Closeable
,AutoCloseable
JarInputStream
类扩展了ZipInputStream
,用于从输入流中读取JAR文件的内容。它支持读取可选的Manifest条目。 Manifest
可用于存储关于JAR文件及其条目的元信息。
访问Manifest
getManifest
方法用于从条目META-INF/MANIFEST.MF
中返回Manifest,当它是流中的第一个条目时(或者如果流中的第一个条目是META-INF/
,第二个条目是META-INF/MANIFEST.MF
)。
getNextJarEntry()
和getNextEntry()
方法用于从流中读取JAR文件条目。当Manifest(META-INF/MANIFEST.MF
)位于流的开头时,这些方法会跳过Manifest。换句话说,当Manifest是流中的第一个条目时,这些方法不会返回Manifest的条目。如果第一个条目是META-INF/
,第二个条目是Manifest,则这些方法也会跳过它们。这些方法是否在Manifest后面出现时跳过Manifest未指定。
已签名的JAR文件
JarInputStream
在以下情况下验证已签名的JAR文件条目的签名:
- Manifest是流中的第一个条目(或者如果流中的第一个条目是
META-INF/
,第二个条目是META-INF/MANIFEST.MF
)。 - 所有与签名相关的条目紧随Manifest之后
一旦JarEntry
完全验证完成,即通过读取直到条目的输入流结束,就可以调用JarEntry.getCertificates()
来获取此条目的证书,调用JarEntry.getCodeSigners()
来获取签名者。
重要的是验证过程不包括验证签名者的证书。调用者应检查JarEntry.getCodeSigners()
的返回值以进一步确定是否可以信任签名。
- API注释:
-
如果在JAR文件签名后修改了
JarEntry
,则在读取条目时将抛出SecurityException
。 - 自版本:
- 1.2
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
中央目录(CEN)头部内部文件属性字段偏移量。static final int
中央目录(CEN)头部外部文件属性字段偏移量。static final int
中央目录(CEN)头部注释长度字段偏移量。static final int
中央目录(CEN)头部未压缩文件crc-32值字段偏移量。static final int
中央目录(CEN)头部磁盘号起始字段偏移量。static final int
中央目录(CEN)头部额外字段长度字段偏移量。static final int
中央目录(CEN)头部加密、解密标志字段偏移量。static final int
中央目录(CEN)头部字节大小(包括签名)。static final int
中央目录(CEN)头部压缩方法字段偏移量。static final int
中央目录(CEN)头部未压缩大小字段偏移量。static final int
中央目录(CEN)头部文件名长度字段偏移量。static final int
中央目录(CEN)头部LOC头部偏移量字段偏移量。static final long
中央目录(CEN)头部签名。static final int
中央目录(CEN)头部压缩大小字段偏移量。static final int
中央目录(CEN)头部修改时间字段偏移量。static final int
中央目录(CEN)头部创建者版本字段偏移量。static final int
中央目录(CEN)头部需要提取的版本字段偏移量。static final int
中央目录(END)头部ZIP文件注释长度字段偏移量。static final int
中央目录(END)头部字节大小(包括签名)。static final int
中央目录(END)头部第一个CEN头部偏移量字段偏移量。static final long
中央目录(END)头部签名。static final int
中央目录(END)头部中央目录大小字节偏移量。static final int
中央目录(END)头部此磁盘上的条目数字段偏移量。static final int
中央目录(END)头部总条目数字段偏移量。static final int
额外本地(EXT)头部未压缩文件crc-32值字段偏移量。static final int
额外本地(EXT)头部字节大小(包括签名)。static final int
额外本地(EXT)头部未压缩大小字段偏移量。static final long
额外本地(EXT)头部签名。static final int
额外本地(EXT)头部压缩大小字段偏移量。static final int
本地文件(LOC)头部未压缩文件crc-32值字段偏移量。static final int
本地文件(LOC)头部额外字段长度字段偏移量。static final int
本地文件(LOC)头部通用位标志字段偏移量。static final int
本地文件(LOC)头部字节大小(包括签名)。static final int
本地文件(LOC)头部压缩方法字段偏移量。static final int
本地文件(LOC)头部未压缩大小字段偏移量。static final int
本地文件(LOC)头部文件名长度字段偏移量。static final long
本地文件(LOC)头部签名。static final int
本地文件(LOC)头部压缩大小字段偏移量。static final int
本地文件(LOC)头部修改时间字段偏移量。static final int
本地文件(LOC)头部需要提取的版本字段偏移量。Fields declared in class java.util.zip.InflaterInputStream
buf, inf, len
Fields declared in class java.io.FilterInputStream
in
-
Constructor Summary
ConstructorDescription创建一个新的JarInputStream
并读取可选的manifest。JarInputStream
(InputStream in, boolean verify) 创建一个新的JarInputStream
并读取可选的manifest。 -
Method Summary
Modifier and TypeMethodDescriptionprotected ZipEntry
createZipEntry
(String name) 为指定的JAR文件条目名称创建一个新的JarEntry
(ZipEntry
)。当JAR文件的第一个条目是流中的第一个条目时(或者如果流中的第一个条目是META-INF/
,第二个条目是META-INF/MANIFEST.MF
),返回此JAR文件的Manifest
,否则返回null
。读取下一个ZIP文件条目并将流定位在条目数据的开头。读取下一个JAR文件条目并将流定位在条目数据的开头。int
read
(byte[] b, int off, int len) 从当前JAR条目读取到字节数组中,返回膨胀的字节数。Methods declared in class java.util.zip.ZipInputStream
available, close, closeEntry, read, readAllBytes, readNBytes, readNBytes, skip, skipNBytes, transferTo
Methods declared in class java.util.zip.InflaterInputStream
fill, mark, markSupported, reset
Methods declared in class java.io.FilterInputStream
read
Methods declared in class java.io.InputStream
nullInputStream
-
Field Details
-
LOCSIG
static final long LOCSIG本地文件(LOC)头部签名。- 参见:
-
EXTSIG
static final long EXTSIG额外本地(EXT)头部签名。- 参见:
-
CENSIG
static final long CENSIG中央目录(CEN)头部签名。- 参见:
-
ENDSIG
static final long ENDSIG中央目录(END)头部签名。- 参见:
-
LOCHDR
static final int LOCHDR本地文件(LOC)头部字节大小(包括签名)。- 参见:
-
EXTHDR
static final int EXTHDR额外本地(EXT)头部字节大小(包括签名)。- 参见:
-
CENHDR
static final int CENHDR中央目录(CEN)头部字节大小(包括签名)。- 参见:
-
ENDHDR
static final int ENDHDR中央目录(END)头部字节大小(包括签名)。- 参见:
-
LOCVER
static final int LOCVER本地文件(LOC)头部需要提取的版本字段偏移量。- 参见:
-
LOCFLG
static final int LOCFLG本地文件(LOC)头部通用位标志字段偏移量。- 参见:
-
LOCHOW
static final int LOCHOW本地文件(LOC)头部压缩方法字段偏移量。- 参见:
-
LOCTIM
static final int LOCTIM本地文件(LOC)头部修改时间字段偏移量。- 参见:
-
LOCCRC
static final int LOCCRC本地文件(LOC)头部未压缩文件crc-32值字段偏移量。- 参见:
-
LOCSIZ
static final int LOCSIZ本地文件(LOC)头部压缩大小字段偏移量。- 参见:
-
LOCLEN
static final int LOCLEN本地文件(LOC)头部未压缩大小字段偏移量。- 参见:
-
LOCNAM
static final int LOCNAM本地文件(LOC)头部文件名长度字段偏移量。- 参见:
-
LOCEXT
static final int LOCEXT本地文件(LOC)头部额外字段长度字段偏移量。- 参见:
-
EXTCRC
static final int EXTCRC额外本地(EXT)头部未压缩文件crc-32值字段偏移量。- 参见:
-
EXTSIZ
static final int EXTSIZ额外本地(EXT)头部压缩大小字段偏移量。- 参见:
-
EXTLEN
static final int EXTLEN额外本地(EXT)头部未压缩大小字段偏移量。- 参见:
-
CENVEM
static final int CENVEM中央目录(CEN)头部创建版本字段偏移量。- 参见:
-
CENVER
static final int CENVER中央目录(CEN)头部解压所需版本字段偏移量。- 参见:
-
CENFLG
static final int CENFLG中央目录(CEN)头部加密、解密标志字段偏移量。- 参见:
-
CENHOW
static final int CENHOW中央目录(CEN)头部压缩方法字段偏移量。- 参见:
-
CENTIM
static final int CENTIM中央目录(CEN)头部修改时间字段偏移量。- 参见:
-
CENCRC
static final int CENCRC中央目录(CEN)头部未压缩文件crc-32值字段偏移量。- 参见:
-
CENSIZ
static final int CENSIZ中央目录(CEN)头部压缩大小字段偏移量。- 参见:
-
CENLEN
static final int CENLEN中央目录(CEN)头部未压缩大小字段偏移量。- 参见:
-
CENNAM
static final int CENNAM中央目录(CEN)头部文件名长度字段偏移量。- 参见:
-
CENEXT
static final int CENEXT中央目录(CEN)头部额外字段长度字段偏移量。- 参见:
-
CENCOM
static final int CENCOM中央目录(CEN)头部注释长度字段偏移量。- 参见:
-
CENDSK
static final int CENDSK中央目录(CEN)头部磁盘起始编号字段偏移量。- 参见:
-
CENATT
static final int CENATT中央目录(CEN)头部内部文件属性字段偏移量。- 参见:
-
CENATX
static final int CENATX中央目录(CEN)头部外部文件属性字段偏移量。- 参见:
-
CENOFF
static final int CENOFF中央目录(CEN)头部LOC头部偏移量字段偏移量。- 参见:
-
ENDSUB
static final int ENDSUB中央目录结束(END)头部此磁盘上的条目数字段偏移量。- 参见:
-
ENDTOT
static final int ENDTOT中央目录结束(END)头部总条目数字段偏移量。- 参见:
-
ENDSIZ
static final int ENDSIZ中央目录结束(END)头部字节中央目录大小字段偏移量。- 参见:
-
ENDOFF
static final int ENDOFF中央目录结束(END)头部第一个CEN头部偏移量字段偏移量。- 参见:
-
ENDCOM
static final int ENDCOM中央目录结束(END)头部zip文件注释长度字段偏移量。- 参见:
-
-
Constructor Details
-
JarInputStream
创建一个新的JarInputStream
并读取可选清单。如果存在清单,并且JarInputStream
已签名,则还会尝试验证签名。- 参数:
-
in
- 实际输入流 - 抛出:
-
IOException
- 如果发生I/O错误
-
JarInputStream
创建一个新的JarInputStream
并读取可选清单。如果存在清单,并且verify为true,则还会尝试验证签名。- 参数:
-
in
- 实际输入流 -
verify
- 是否验证已签名的JarInputStream
。 - 抛出:
-
IOException
- 如果发生I/O错误
-
-
Method Details
-
getManifest
返回此JAR文件的Manifest
,当它是流中的第一个条目时(或者如果流中的第一个条目是META-INF/
,第二个条目是META-INF/MANIFEST.MF
),否则返回null
。- 返回:
-
此JAR文件的
Manifest
,否则返回null
。
-
getNextEntry
读取下一个ZIP文件条目,并将流定位到条目数据的开头。如果启用了验证,并且在定位下一个条目的过程中检测到任何无效签名,将导致异常。- 覆盖:
-
getNextEntry
在类ZipInputStream
- 返回:
- 下一个ZIP文件条目,如果没有更多条目则返回null
- 抛出:
-
ZipException
- 如果发生ZIP文件错误 -
IOException
- 如果发生I/O错误 -
SecurityException
- 如果任何jar文件条目签名不正确。
-
getNextJarEntry
读取下一个JAR文件条目,并将流定位到条目数据的开头。如果启用了验证,并且在定位下一个条目的过程中检测到任何无效签名,将导致异常。- 返回值:
- 下一个JAR文件条目,如果没有更多条目则返回null
- 抛出:
-
ZipException
- 如果发生ZIP文件错误 -
IOException
- 如果发生I/O错误 -
SecurityException
- 如果任何JAR文件条目签名不正确
-
read
从当前JAR条目读取到一个字节数组中,返回膨胀字节数的数量。如果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
- 抛出:
-
NullPointerException
- 如果b
为null
-
IndexOutOfBoundsException
- 如果off
为负数,len
为负数,或len
大于b.length - off
-
ZipException
- 如果发生ZIP文件错误 -
IOException
- 如果发生I/O错误 -
SecurityException
- 如果任何JAR文件条目签名不正确 - 参见:
-
createZipEntry
为指定的JAR文件条目名称创建一个新的JarEntry
(ZipEntry
)。指定的JAR文件条目名称的清单属性将被复制到新的JarEntry
中。- 覆盖:
-
createZipEntry
在类ZipInputStream
- 参数:
-
name
- JAR/ZIP文件条目的名称 - 返回值:
-
刚创建的
JarEntry
对象
-