我有一个ZIP存档,嵌入在一个更大的文件中.我知道存档在较大文件中的起始偏移量及其长度.
是否有任何Java库可以让我直接读取存档中包含的文件?我正在思考ZipFile.getInputStream().不幸的是,ZipFile这个用例不起作用,因为它的构造函数需要一个独立的ZIP文件.
出于性能原因,我无法在打开之前将ZIP achive复制到单独的文件中.
编辑:为了清楚,我确实可以随机访问该文件.
我想出了一个快速破解(需要在这里和那里进行消毒),但是它从嵌入在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |