繁体   English   中英

如何获取表示 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();
    }
}

那么,此时我该怎么做才能返回一个 InputStream 来准确地表示 ZipEntry 在该点表示的一个文件? 我已经考虑过只返回 zipInputStream,但是由于我不知道它是如何工作的,我担心这样做也会包括在要返回的文件之后仍在流中的所有文件。

你几乎就在那里。 尝试

    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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM