我有一个 zip 文件,其内容显示为 byte[]但原始文件对象不可访问。我想阅读每个条目的内容。我能够从字节的 ByteArrayInputStream 创建 ZipInputStream,并且可以读取条目及其名称。但是我看不到一种简单的方法来提取每个条目的内容。
(我看过 Apache Commons,但也看不到一个简单的方法)。
UPDATE@Rich的代码似乎可以解决问题,谢谢
QUERY为什么两个示例的乘数都是 * 4 (128/512 和 1024*4)?
如果您想处理流中的嵌套 zip 条目,请参阅这个答案 https://stackoverflow.com/questions/1176859/jarfile-from-inside-a-jar-or-inputstream-to-file/1176957#1176957寻求想法。因为内部条目是按顺序列出的,所以可以通过获取每个条目的大小并从流中读取那么多字节来处理它们。
更新了一个将每个条目复制到标准输出的示例:
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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)