Java:有什么方法可以从字节数组中获取 ZipFile(或任何使用直接 getEntry 方法的方法)?
Java: any way to get a ZipFile (or anything with a direct getEntry method) from a byte array?
我在一个字节数组中有一个 zip 文件的内容。该文件包含许多条目(通常约为 12 个),但我只关心其中三个。
我想以某种方式将它放入 ZipFile
对象中,这样我就可以使用 ZipFile.getEntry
将这三个特定的 ZipEntry
拉出来。我愿意使用 ZipFile
以外的东西,它具有类似的按名称查找方法,例如 getEntry
.
我的初步调查表明我运气不好。 ZipFile
需要文件子系统中的真实文件(我不能也不想访问)所以我不能从这里到达那里,除了 ZipFile
之外没有其他方法可以提取特定的按名称输入;但我想检查一下。在 C# 和 Python 等语言中,这非常简单(在 C# 中,我从字节数组到 MemoryStream
再到 ZipArchive
;在 Python 中,我只是将它包装在 StringIO
并像文件一样对待),所以我想确保我没有遗漏一些明显的东西。
我的 B 计划是使用 ZipInputStream
并重复调用 getNextEntry
来检查所有十几个条目,并丢弃除我关心的三个条目之外的所有条目,但这闻起来很糟糕对我来说。
A ZipInputStream
可以实例化为任何 InputStream
... 包括 ByteArrayInputStream
.
除此之外你运气不好......如果你坚持使用 Java SE 类.
问题的根源(从 API 设计角度来看)是 ZipFile 是在本机代码中实现的功能的包装器。本机代码为自己打开输入流,并使用本机文件名/路径名。
本机 ZIP 实现以这种方式工作的主要原因是 JVM 需要从 ZIP 文件加载代码作为 bootstrap 过程的一部分。这发生在之前 本机实现已加载类,例如InputStream
。确实,它必须。
有许多第 3 方库。从阅读此问答开始 - What is a good Java library to zip/unzip files?
我在一个字节数组中有一个 zip 文件的内容。该文件包含许多条目(通常约为 12 个),但我只关心其中三个。
我想以某种方式将它放入 ZipFile
对象中,这样我就可以使用 ZipFile.getEntry
将这三个特定的 ZipEntry
拉出来。我愿意使用 ZipFile
以外的东西,它具有类似的按名称查找方法,例如 getEntry
.
我的初步调查表明我运气不好。 ZipFile
需要文件子系统中的真实文件(我不能也不想访问)所以我不能从这里到达那里,除了 ZipFile
之外没有其他方法可以提取特定的按名称输入;但我想检查一下。在 C# 和 Python 等语言中,这非常简单(在 C# 中,我从字节数组到 MemoryStream
再到 ZipArchive
;在 Python 中,我只是将它包装在 StringIO
并像文件一样对待),所以我想确保我没有遗漏一些明显的东西。
我的 B 计划是使用 ZipInputStream
并重复调用 getNextEntry
来检查所有十几个条目,并丢弃除我关心的三个条目之外的所有条目,但这闻起来很糟糕对我来说。
A ZipInputStream
可以实例化为任何 InputStream
... 包括 ByteArrayInputStream
.
除此之外你运气不好......如果你坚持使用 Java SE 类.
问题的根源(从 API 设计角度来看)是 ZipFile 是在本机代码中实现的功能的包装器。本机代码为自己打开输入流,并使用本机文件名/路径名。
本机 ZIP 实现以这种方式工作的主要原因是 JVM 需要从 ZIP 文件加载代码作为 bootstrap 过程的一部分。这发生在之前 本机实现已加载类,例如InputStream
。确实,它必须。
有许多第 3 方库。从阅读此问答开始 - What is a good Java library to zip/unzip files?