我有一个zip文件,其内容显示为byte []但原始文件对象不可访问.我想阅读每个条目的内容.我能够从字节的ByteArrayInputStream创建一个ZipInputStream,并可以读取条目及其名称.但是,我看不到一种简单的方法来提取每个条目的内容.
(我看过Apache Commons,但也看不到那么简单的方法).
UPDATE @ Rich的代码似乎解决了这个问题,谢谢
QUERY为什么两个例子的乘数都是* 4(128/512和1024 * 4)?
解决方法:
如果要处理流中的嵌套zip条目,请参阅this answer以获取提示.因为内部条目是按顺序列出的,所以可以通过获取每个条目的大小并从流中读取那么多字节来处理它们.
更新了将每个条目复制到标准输出的示例:
ZipInputStream is;//obtained earlier
ZipEntry entry = is.getNextEntry();
while(entry != null) {
copyStream(is, out, entry);
entry = is.getNextEntry();
}
...
private static void copyStream(InputStream in, OutputStream out,
ZipEntry entry) throws IOException {
byte[] buffer = new byte[1024 * 4];
long count = 0;
int n = 0;
long size = entry.getSize();
while (-1 != (n = in.read(buffer)) && count < size) {
out.write(buffer, 0, n);
count += n;
}
}