Java:从字节数组中获取ZipFile(或带有直接getEntry方法的任何东西)的任何方法?

时间:2015-01-31 04:01:06

标签: java arrays byte zipfile

我在一个字节数组中有一个zip文件的内容。该文件包含许多条目(通常约为12个),但我只关心其中的三个。

我想以某种方式将其转换为ZipFile对象,因此我可以使用ZipEntry将这些特定的三个ZipFile.getEntry拉出来。我愿意使用ZipFile之外的其他内容,这些内容具有类似getEntry的查找方法。

我的初步调查表明我运气不好。 ZipFile需要文件子系统中的真实文件(我不能也不想访问),所以我不能从这里到达那里,除ZipFile之外不存在允许提取特定文件的方法条目名称;但我想检查一下。在C#和Python等语言中,这非常简单(在C#中我从字节数组转到MemoryStreamZipArchive;在Python中我只是将它包装在StringIO中并像文件一样对待)所以我想确保我没有遗漏任何明显的东西。

我的B计划是使用ZipInputStream并重复拨打getNextEntry来完成所有十几个参赛作品,除了我关心的三个以外,所有这些都扔掉了,但这对我来说闻起来很糟糕

1 个答案:

答案 0 :(得分:1)

可以为任何ZipInputStream实例化InputStream ...包括ByteArrayInputStream

除此之外,如果你坚持使用Java SE类,那你就不走运了。

问题的根源(从API设计的角度来看)是ZipFile是在本机代码中实现的功能的包装器。本机代码为自己打开输入流,它使用本机文件名/路径名。

以这种方式工作的本机ZIP实现的主要原因是JVM需要从ZIP文件加载代码作为引导程序的一部分。这种情况发生在之前本机实现已加载诸如InputStream之类的类。确实,它必须。

有许多第三方图书馆。首先阅读此Q& A - What is a good Java library to zip/unzip files?