- 所有已实现的接口:
Closeable,AutoCloseable
- 已知子类:
JarInputStream
读取 Zip 文件条目
getNextEntry() 方法用于读取下一个 ZIP 文件条目(ZIP 格式的本地文件 (LOC) 标头记录)并将流定位到条目的文件数据。文件数据可以使用 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
-
字段摘要
字段修饰符和类型Field描述static 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第一个 CEN 标头字段偏移量的中央目录结束 (END) 标头偏移量。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) 标头版本。在类 java.util.zip.InflaterInputStream 中声明的字段
buf, inf, len在类 java.io.FilterInputStream 中声明的字段
in -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述int当检测到当前 ZIP 条目的流结尾或closeEntry()已在当前 ZIP 条目上调用时返回 0,否则返回 1。voidclose()关闭此输入流并释放与该流关联的所有系统资源。void关闭当前 ZIP 条目并定位流以读取下一个条目。protected ZipEntrycreateZipEntry(String name) 为指定条目名称创建一个新的ZipEntry对象。读取下一个 ZIP 文件条目并将流定位在条目数据的开头。intread()从当前 ZIP 条目的输入流中读取下一个数据字节。intread(byte[] b, int off, int len) 从输入流中将请求的字节数读取到当前 ZIP 条目的给定字节数组中,返回膨胀的字节数。byte[]从当前 ZIP 条目的输入流中读取所有剩余字节。intreadNBytes(byte[] b, int off, int len) 从输入流中将请求的字节数读取到当前 ZIP 条目的给定字节数组中,返回膨胀的字节数。byte[]readNBytes(int len) 从当前 ZIP 条目的输入流中读取指定数量的字节。longskip(long n) 对于当前 ZIP 条目,跳过并丢弃此输入流中的n字节数据。voidskipNBytes(long n) 跳过并丢弃来自当前 ZIP 条目的输入流中的n字节数据。longtransferTo(OutputStream out) 从此输入流中读取当前 ZIP 条目的所有字节,并按照读取顺序将字节写入给定的输出流。在类 java.util.zip.InflaterInputStream 中声明的方法
fill, mark, markSupported, reset在类 java.io.FilterInputStream 中声明的方法
read在类 java.io.InputStream 中声明的方法
nullInputStream
-
字段详细信息
-
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第一个 CEN 标头字段偏移量的中央目录结束 (END) 标头偏移量。- 参见:
-
ENDCOM
static final int ENDCOM中央目录结束 (END) 头 zip 文件注释长度字段偏移量。- 参见:
-
-
构造方法详细信息
-
方法详情
-
getNextEntry
读取下一个 ZIP 文件条目并将流定位在条目数据的开头。- 返回:
- 下一个 ZIP 文件条目,如果没有更多条目则为 null
- 抛出:
ZipException- 如果发生 ZIP 文件错误IOException- 如果发生 I/O 错误
-
closeEntry
关闭当前 ZIP 条目并定位流以读取下一个条目。- 抛出:
ZipException- 如果发生 ZIP 文件错误IOException- 如果发生 I/O 错误
-
available
当检测到当前 ZIP 条目的流结尾或closeEntry()已在当前 ZIP 条目上调用时返回 0,否则返回 1。程序不应指望此方法返回可以无阻塞读取的实际字节数。
- 重写:
available在类InflaterInputStream中- 返回:
-
当检测到当前 ZIP 条目的流结尾或
closeEntry()已在当前 ZIP 条目上调用时为 0,否则为 1。 - 抛出:
IOException- 如果发生 I/O 错误。
-
read
从当前 ZIP 条目的输入流中读取下一个数据字节。此方法将阻塞,直到有足够的输入可用于解压缩。- 重写:
read在类InflaterInputStream中- 返回:
- 读取的字节,如果到达流的末尾则为 -1
- 抛出:
IOException- 如果发生 I/O 错误- 参见:
-
readAllBytes
从当前 ZIP 条目的输入流中读取所有剩余字节。此方法会阻塞,直到读取完所有剩余字节并检测到流结束,或者抛出异常。此方法不会关闭输入流。当此流到达流的末尾时,进一步调用此方法将返回一个空字节数组。
请注意,此方法适用于方便将所有字节读入字节数组的简单情况。它不适用于读取具有大量数据的输入流。
如果从输入流读取时发生 I/O 错误,那么它可能会在读取了一些(但不是全部)字节后这样做。因此,输入流可能不在流的末尾并且可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭流。
- 重写:
readAllBytes在类InputStream中- 返回:
- 包含从此输入流读取的字节的字节数组
- 抛出:
OutOfMemoryError- 如果无法分配所需大小的数组。IOException- 如果发生 I/O 错误- 自从:
- 9
-
readNBytes
从当前 ZIP 条目的输入流中读取指定数量的字节。此方法会阻塞,直到已读取请求的字节数、检测到流结尾或抛出异常。此方法不会关闭输入流。返回数组的长度等于从流中读取的字节数。如果
len为零,则不读取任何字节并返回一个空字节数组。否则,最多会从流中读取len个字节。如果遇到流结尾,可能会读取少于len个字节。当此流到达流的末尾时,进一步调用此方法将返回一个空字节数组。
请注意,此方法适用于方便将指定数量的字节读入字节数组的简单情况。此方法分配的内存总量与从
len限定的流中读取的字节数成正比。因此,如果有足够的可用内存,可以使用非常大的len值安全地调用该方法。如果从输入流读取时发生 I/O 错误,那么它可能会在读取了一些(但不是全部)字节后这样做。因此,输入流可能不在流的末尾并且可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭流。
- 重写:
readNBytes在类InputStream中- 实现注意事项:
-
此方法调用
super.readNBytes(int len)。 - 参数:
len- 要读取的最大字节数- 返回:
- 包含从此输入流读取的字节的字节数组
- 抛出:
OutOfMemoryError- 如果无法分配所需大小的数组。IOException- 如果发生 I/O 错误- 自从:
- 11
-
readNBytes
从输入流中将请求的字节数读取到当前 ZIP 条目的给定字节数组中,返回膨胀的字节数。此方法会阻塞,直到读取了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]不受影响。如果从输入流读取时发生 I/O 错误,那么它可能会在
b的一些(但不是全部)字节已用输入流中的数据更新后执行此操作。因此,输入流和b可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭流。- 重写:
readNBytes在类InputStream中- 参数:
b- 读取数据的字节数组off- 写入数据的b中的起始偏移量len- 要读取的最大字节数- 返回:
- 读入缓冲区的实际字节数
- 抛出:
NullPointerException- 如果b是nullIndexOutOfBoundsException- 如果off为负,len为负,或者len大于b.length - offIOException- 如果发生 I/O 错误- 自从:
- 9
-
skipNBytes
跳过并丢弃来自当前 ZIP 条目的输入流中的n字节数据。如果n为零,则不会跳过任何字节。如果n为负,则不会跳过任何字节。子类可能会以不同方式处理负值。此方法会阻塞,直到跳过请求的字节数、到达文件末尾或抛出异常。
如果在流到达所需位置之前到达流末尾,则会抛出
EOFException。如果发生 I/O 错误,则输入流可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭流。
- 重写:
skipNBytes在类InputStream中- 参数:
n- 要跳过的字节数。- 抛出:
IOException- 如果流无法正确定位或发生 I/O 错误。- 自从:
- 12
- 参见:
-
transferTo
从此输入流中读取当前 ZIP 条目的所有字节,并按照读取顺序将字节写入给定的输出流。返回时,此输入流将位于流的末尾。此方法不会关闭任何一个流。此方法可能会无限期地阻止从输入流读取或写入输出流。输入和/或输出流为异步关闭,或传输期间中断的线程,是高度输入和输出流特定的,因此未指定。
如果从输入流读取或写入输出流发生 I/O 错误,那么它可能会在读取或写入一些字节后发生错误。因此,输入流可能不在流的末尾,并且一个或两个流可能处于不一致状态。强烈建议在发生 I/O 错误时立即关闭两个流。
- 重写:
transferTo在类InputStream中- 参数:
out- 输出流,非空- 返回:
- 传输的字节数
- 抛出:
NullPointerException- 如果out是nullIOException- 如果读取或写入时发生 I/O 错误- 自从:
- 9
-
read
从输入流中将请求的字节数读取到当前 ZIP 条目的给定字节数组中,返回膨胀的字节数。如果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在类InflaterInputStream中- 参数:
b- 读取数据的缓冲区off- 目标数组中的起始偏移量blen- 读取的最大字节数- 返回:
- 读取的实际字节数,如果到达条目末尾则为 -1
- 抛出:
NullPointerException- 如果b是null。IndexOutOfBoundsException- 如果off为负,len为负,或者len大于b.length - offZipException- 如果发生 ZIP 文件错误IOException- 如果发生 I/O 错误- 参见:
-
skip
对于当前 ZIP 条目,跳过并丢弃此输入流中的n字节数据。- 重写:
skip在类InflaterInputStream中- 参数:
n- 要跳过的字节数- 返回:
- 实际跳过的字节数
- 抛出:
ZipException- 如果发生 ZIP 文件错误IOException- 如果发生 I/O 错误IllegalArgumentException- 如果n < 0- 参见:
-
close
关闭此输入流并释放与该流关联的所有系统资源。- 指定者:
close在接口AutoCloseable中- 指定者:
close在接口Closeable中- 重写:
close在类InflaterInputStream中- 抛出:
IOException- 如果发生 I/O 错误- 参见:
-
createZipEntry
为指定条目名称创建一个新的ZipEntry对象。- 参数:
name- ZIP 文件条目名称- 返回:
- 刚刚创建的 ZipEntry
-