是否可以从 zipinputstream 获取 zipentry 的输入流?

2022-09-01 10:35:32

我从另一个来源收到一个ZipInputStream,我需要将第一个条目的输入流提供给另一个来源。

我希望能够在不将临时文件保存在设备上的情况下执行此操作,但是我知道为单个条目获取输入流的唯一方法是通过ZipFile.getInputStream(entry),并且由于我有ZipInputStream而不是ZipFile,这是不可能的。

所以我最好的解决方案是

  1. 将传入的输入流保存到文件
  2. 将文件读取为 Zip 文件
  3. 使用第一个条目的输入流
  4. 删除临时文件。

答案 1

想:

这是完全可能的,在条目的开头调用位置,因此提供 是等效于提供一个 。ZipInputStream.getNextEntry()InputStreamZipInputStreamZipEntryInputStream

足够智能,可以处理条目下游的EOF,或者看起来是这样。ZipInputStream

p.


答案 2

除了@pstanton的帖子之外,这里还有一个代码示例。我使用以下代码解决了这个问题。如果没有一个例子,很难理解以前的答案是什么。

//If you just want the first file in the zipped InputStream use this code. 
//Otherwise loop through the InputStream using getNextEntry()
//till you find the file you want.
private InputStream convertToInputStream(InputStream stream) throws IOException {
    ZipInputStream zis = new ZipInputStream(stream);
    zis.getNextEntry();
    return zis;
} 

使用此代码,您可以返回压缩文件的输入流。


推荐