首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取ZipInputStream的大小

获取ZipInputStream的大小
EN

Stack Overflow用户
提问于 2012-06-19 17:35:20
回答 3查看 7.3K关注 0票数 6

在我们完全读取流之前,有没有办法找到/估计ZipInputStream的大小?

例如,在读取用户数据之前,我们可以使用getNextEntry获取条目的元数据。

Inputstream有一个方法available()可以返回可以从该输入流读取的字节数的估计值,但是我找不到用于ZipInputStream的类似方法。

EN

回答 3

Stack Overflow用户

发布于 2012-06-19 17:46:43

ZipInputStream有方法available(),但它返回0或1。

要获得任何类型文件的估计大小,可以先使用FileInputStream,然后使用ZipInputStream读取压缩文件。例如。

代码语言:javascript
复制
 public class ZipUtil {

    public static void main(String[] args) throws Exception {
        ZipInputStream zis = null;

        FileInputStream fis = new FileInputStream("C:/catalina.zip");
        int size = fis.available();
        System.out.println("size in KB : " + size/1024);
        zis = new ZipInputStream(fis);        

        ZipEntry ze;
        while ((ze = zis.getNextEntry()) != null) {
            System.out.println(ze.getName());
        }
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-06-19 17:47:40

如果你只有流,那么我不这么认为。

zip file format只有一系列条目,最后是一个全局目录(其中包含所有文件及其大小的表)。因此,如果不能访问该文件,您将无法获得该信息。

票数 3
EN

Stack Overflow用户

发布于 2012-06-19 18:29:01

Inputstream有一个方法available(),用于返回可从此输入流读取的字节数的估计值

而不会阻塞。不是一回事。Javadoc中有一个关于不将该值视为总文件大小的特定警告。

,但我找不到适用于ZipInputStream的类似方法。

这很奇怪,因为它就在那里。然而,它返回零,这是它可以在不阻塞的情况下读取多少数据的最好估计。

为什么?因为(a)它是一个流,(ii)它是一个压缩流。在不全部阅读的情况下无法知道有多少内容;也无法在不阻塞的情况下知道其中有多少内容可以读取,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11098253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档