스트림을 완전히 읽기 전에 ZipInputStream의 크기를 찾고 추정하는 방법이 있습니까?ZipInputStream 크기 얻기
예를 들어 userdata를 읽기 전에 getNextEntry를 사용하여 항목의 메타 데이터를 가져올 수 있습니다.
Inputstream에는이 입력 스트림에서 읽을 수있는 바이트 수를 추정 할 수있는 available() 메서드가 있지만 ZipInputStream에 대해 비슷한 메서드를 찾을 수 없습니다.
스트림을 완전히 읽기 전에 ZipInputStream의 크기를 찾고 추정하는 방법이 있습니까?ZipInputStream 크기 얻기
예를 들어 userdata를 읽기 전에 getNextEntry를 사용하여 항목의 메타 데이터를 가져올 수 있습니다.
Inputstream에는이 입력 스트림에서 읽을 수있는 바이트 수를 추정 할 수있는 available() 메서드가 있지만 ZipInputStream에 대해 비슷한 메서드를 찾을 수 없습니다.
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());
}
}
}
이 접근 방식의 문제점은 FileInputStream을 만들 수있는 zip 파일이 없다는 것입니다. 나는 ZipInputStream 만 가지고 작업 할 수있다. –
코드를 공유하여 요구 사항을보다 잘 이해하십시오 –
Javadoc에는 available()를 총 크기 값으로 사용하는 것에 대한 특정 경고가 있습니다. – EJP
스트림이있는 경우 그렇게 생각하지 않습니다.
zip file format에는 일련의 항목이 있고 그 다음에 전체 파일과 크기의 테이블이있는 의 끝에이라는 글로벌 디렉토리가 있습니다. 따라서 파일에 액세스하지 않으면 해당 정보에 접근 할 수 없습니다.
의 InputStream은 차단하지 않고 입력 스트림
에서 읽을 수있는 바이트의 수를 추정 반환 가능한() 메소드를 갖는다. 같은 것이 아닙니다. Javadoc에 대한 특정 경고가 이 아니며은이 값을 전체 파일 크기로 처리합니다.
그러나 나는 ZipInputStream과 비슷한 방법을 찾을 수 없습니다.
거기에 있기 때문에 이상합니다. 그러나 0을 반환합니다. 이는 차단하지 않고 을 얼마나 많이 읽을 수 있는지에 대한 최상의 추정입니다.
왜? 왜냐하면 (a) 스트림이고, (ii) 압축 된 스트림이기 때문입니다. 모든 것을 읽지 않고 얼마나 많은 것을 알 수있는 방법이 없습니다. 차단하지 않고 얼마만큼 읽을 수 있는지 알 수있는 방법이 없습니다.
스트림이 어디서 왔는지 ZipFile에 액세스 할 수 있습니까? – Thilo
아니요. 우리는 단지 스트림이 들어 왔을뿐입니다. 완전한 스트림을 읽기 전에 메타 데이터를 얻는 방법이 있는지 알고 싶었습니다. –