如何获取代表 ZipInputStream 中一个文件的 InputStream

How to get an InputStream representing one file in a ZipInputStream

我有以下情况:

我收到一个以字节数组形式通过网络发送的 Zip 文件。我不想在本地保存该文件,而是针对该存档中的单个文件并将其作为 InputStream 导入到我的解决方案中。

到目前为止,我已经能够识别正确的 ZipEntry。然而,从这里开始,所有 Zip 教程继续通过其文件名读取条目,这在我的情况下自然不起作用,因为 zip 文件在本地不存在。

private void InputStream getReqifInputStreamFrom(byte[] reqifzFileBytes){
    ByteArrayInputStream inputStream = new ByteArrayInputStream(reqifzFileBytes);
    ZipInputStream zipInputStream = new ZipInputStream(inputStream);
    ZipEntry zipEntry = zipInputStream.getNextEntry();

    while (zipEntry != null) {
        String fileName = zipEntry.getName();
        if (fileName.endsWith(REQIF_FILE_SUFFIX)) {
            return ???;
        }
        zipEntry = zipInputStream.getNextEntry();
    }
}

那么,在那个时候我可以做些什么来 return 一个 InputStream 正好代表 ZipEntry 在那个时候代表的一个文件?我考虑过 returning zipInputStream,但由于我不知道它是如何工作的,我担心这样做还会包括该文件之后仍在流中的所有文件 return也编辑了。

您几乎就在那里。尝试

    private InputStream getReqifInputStreamFrom(byte[] reqifzFileBytes) throws IOException {
        InputStream result = null;
        ByteArrayInputStream inputStream = new ByteArrayInputStream(reqifzFileBytes);
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        ZipEntry zipEntry = zipInputStream.getNextEntry();

        while (zipEntry != null) {
            String fileName = zipEntry.getName();
            if (fileName.endsWith(REQIF_FILE_SUFFIX)) {
                result = zipInputStream;
                break;
            }
            zipEntry = zipInputStream.getNextEntry();
        }
        return result;
    }