2012-06-19 4 views
5

스트림을 완전히 읽기 전에 ZipInputStream의 크기를 찾고 추정하는 방법이 있습니까?ZipInputStream 크기 얻기

예를 들어 userdata를 읽기 전에 getNextEntry를 사용하여 항목의 메타 데이터를 가져올 수 있습니다.

Inputstream에는이 입력 스트림에서 읽을 수있는 바이트 수를 추정 할 수있는 available() 메서드가 있지만 ZipInputStream에 대해 비슷한 메서드를 찾을 수 없습니다.

+0

스트림이 어디서 왔는지 ZipFile에 액세스 할 수 있습니까? – Thilo

+0

아니요. 우리는 단지 스트림이 들어 왔을뿐입니다. 완전한 스트림을 읽기 전에 메타 데이터를 얻는 방법이 있는지 알고 싶었습니다. –

답변

1

ZipInputStream 사용할 수() 메소드를 가지고 있지만, 0 또는

1. zip 파일 사용 ZipInputStream를 읽을 다음, 당신이 FileInputStream에 사용할 수 있습니다 모든 종류의 파일의 예상 크기를 얻고 돌아갑니다. Ex.

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()); 
     } 
    } 
} 
+0

이 접근 방식의 문제점은 FileInputStream을 만들 수있는 zip 파일이 없다는 것입니다. 나는 ZipInputStream 만 가지고 작업 할 수있다. –

+0

코드를 공유하여 요구 사항을보다 잘 이해하십시오 –

+1

Javadoc에는 available()를 총 크기 값으로 사용하는 것에 대한 특정 경고가 있습니다. – EJP

2

스트림이있는 경우 그렇게 생각하지 않습니다.

zip file format에는 일련의 항목이 있고 그 다음에 전체 파일과 크기의 테이블이있는 의 끝에이라는 글로벌 디렉토리가 있습니다. 따라서 파일에 액세스하지 않으면 해당 정보에 접근 할 수 없습니다.

1

의 InputStream은 차단하지 않고 입력 스트림

에서 읽을 수있는 바이트의 수를 추정 반환 가능한() 메소드를 갖는다. 같은 것이 아닙니다. Javadoc에 대한 특정 경고가 이 아니며은이 값을 전체 파일 크기로 처리합니다.

그러나 나는 ZipInputStream과 비슷한 방법을 찾을 수 없습니다.

거기에 있기 때문에 이상합니다. 그러나 0을 반환합니다. 이는 차단하지 않고 을 얼마나 많이 읽을 수 있는지에 대한 최상의 추정입니다.

왜? 왜냐하면 (a) 스트림이고, (ii) 압축 된 스트림이기 때문입니다. 모든 것을 읽지 않고 얼마나 많은 것을 알 수있는 방법이 없습니다. 차단하지 않고 얼마만큼 읽을 수 있는지 알 수있는 방법이 없습니다.