那么,当使用ZipInputStream时,要在网络上获取Zip文件的InputStream,它是否在使用时将整个ZIP文件下载到用户计算机中?
例如,如果程序使用ZipInputStream来查看zip的内容,它到底是如何工作的?它是下载了拉链,然后再查看它呢?
发布于 2014-05-10 16:59:18
ZIP文件结构类似于(LOC+Content)+ CEN,其中LOC+Content是头,每个条目的内容,CEN是索引。
ZipInputStream一次只使用每个条目前面的“本地文件(LOC)”记录顺序读取输入源。
它不支持对以前的条目进行回溯,这意味着不可能获得所有条目的列表,然后读取某些条目的内容。
它不支持通常位于ZIP文件末尾的中央目录(CEN)记录。从技术上讲,只使用LOC记录和忽略CEN并不是读取ZIP文件的正确方法,但通常它并不是非常关键的。例如,CEN提供了一种将某些条目标记为已删除的方法,而无需物理地将它们从文件中删除,因此忽略CEN将导致读取过时的条目。
如果需要获取ZIP文件中的条目列表,则必须扫描整个文件,这意味着如果通过HTTP访问整个文件,则下载整个文件。如果您需要读取某个条目的内容,那么您必须打开一个新的HTTP连接,并重新读取(跳过)至少到所需条目为止的数据量。
首先将整个ZIP文件下载到本地计算机,然后处理本地文件,这似乎是更好的解决方案。
https://stackoverflow.com/questions/23583435
复制相似问题