[英]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
以遍历所有十几个条目,并丢弃所有我不在乎的条目,但这对我来说很不好。
可以为任何InputStream
实例化ZipInputStream
,包括ByteArrayInputStream
。
除此之外,如果您坚持使用Java SE类,那么您会不走运。
问题的根源(从API设计的角度来看)是ZipFile是使用本机代码实现的功能的包装。 本机代码自行打开输入流,并使用本机文件名/路径名。
能够以这种方式工作的本机ZIP实现的主要原因是,JVM需要作为引导过程的一部分从ZIP文件中加载代码。 这是在本机实现加载诸如InputStream
类的类之前发生的。 确实,它必须这样做。
有许多第三方库。 从阅读此问答开始- 什么是压缩/解压缩文件的良好Java库?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.