我有一个嵌入到较大文件中的 ZIP 存档。我知道存档在较大文件中的起始偏移量及其长度。
是否有任何 Java 库可以让我直接读取存档中包含的文件?我正在思考ZipFile.getInputStream() http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipFile.html#getInputStream%28java.util.zip.ZipEntry%29。很遗憾,ZipFile http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipFile.html不适用于此用例,因为其构造函数需要独立的 ZIP 文件。
出于性能原因,我无法在打开 ZIP 存档之前将其复制到单独的文件中。
edit:需要明确的是,我确实可以随机访问该文件。
我想出了一个快速破解方法(需要到处清理),但它从嵌入在 TAR 中的 ZIP 存档中读取文件内容。它使用 Java6、FileInputStream、ZipEntry 和 ZipInputStream。 '在我的本地机器上运行':
final FileInputStream ins = new FileInputStream("archive.tar");
// Zip starts at 0x1f6400, size is not needed
long toSkip = 0x1f6400;
// Safe skipping
while(toSkip > 0)
toSkip -= ins.skip(toSkip);
final ZipInputStream zipin = new ZipInputStream(ins);
ZipEntry ze;
while((ze = zipin.getNextEntry()) != null)
{
final byte[] content = new byte[(int)ze.getSize()];
int offset = 0;
while(offset < content.length)
{
final int read = zipin.read(content, offset, content.length - offset);
if(read == -1)
break;
offset += read;
}
// DEBUG: print out ZIP entry name and filesize
System.out.println(ze + ": " + offset);
}
zipin.close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)