如何通过单个InputStream读取多个ZipEntries

时间:2010-08-24 11:59:08

标签: zip inputstream zipinputstream

我必须将InputStream作为参数传递给第三方库,第三方库将从InputStream中读取完整内容并完成其工作。

我的问题是,我的一些文件是Zip文件 - 有多个ZipEntry。根据我的理解,一次可以读取一个zipEntry,然后执行zipInputStream.getNextEntry()然后再次读取,依此类推。但是,第三方库不理解这一点,并期望单个InputStream。 zip文件的所有zipEntries都应该作为单个inputStream提供。

请告诉我如何做到这一点。我不能使用ZipFile,因为文件不存储在本地(在不同的服务器中)。我也无法读取所有zipEntries并构造ByteArrayOutputStream或字符串,因为文件可能非常大并且会增加内存使用量。

我想要一种方法让一个inputStream从一个zip文件的多个zip条目中透明地读取。

提前谢谢, Prasanna

1 个答案:

答案 0 :(得分:0)

我不是专家,但我看到了两种方法来做你要求的事情:

虽然我不会称之为最有效的方法,但相当简单的方法是将它们全部写入缓冲区,然后使用该缓冲区来提供输入流。您可以查看使用ByteArrayOutputStream,将其提供给ZipEntries,然后使用相同的buf创建ByteArrayInputStream

或者,SequenceInputStream听起来就像你所做的那样,但我没有机会详细研究它。

K.Barad