有没有办法转换DataHandler(带有压缩内容)而不创建File对象来获取InputStream?

时间:2012-11-12 13:11:57

标签: java stream zip java-io zipfile

我想省略创建File。我的DataHandler对象包含zip文件,其中包含一个条目。我需要正确InputStream才能阅读压缩内容。

实际上,我的“流程”如下:DataHandler - >档案 - > ZipFile - >第一个ZipEntry.getInputStream()。

有没有办法不创建File/ZipFile对象?

3 个答案:

答案 0 :(得分:2)

是的,您可以使用ZipInputStream代替。

编辑:这取决于您的压缩内容在DataHandler中的存储方式。

如果它存储在字节数组中......

byte[] zippedContent = dataHandler.getContent();
InputStream in = new ByteArrayInputStream(zippedContent);
ZipInputStream zipIn = new ZipInputStream(in)
ZipEntry zipEntry = zipIn.getNextEntry();

如果它可以访问InputStream ...

ZipInputStream zipIn = new ZipInputStream(dataHandler.getInputStream());
ZipEntry zipEntry = zipIn.getNextEntry();

现在,您可以像读取任何其他InputStream一样从ZipInputStream中读取扩展内容。

答案 1 :(得分:0)

您可能正在寻找ZipInputStream

答案 2 :(得分:0)

解决方案是:

DataHandler dh = ... 
ZipInputStream zis = new ZipInputStream(dh.getInputStream());
ZipEntry entry = zis.getNextEntry();

...之后zis当前设置为第一个zip条目的开头。

感谢@aetheria& @Janoz ZipInputStream暗示。