2014-05-10 3 views
1

ZipInputStream을 사용하면 웹에서 Zip 파일의 InputStream을 가져올 때 전체 ZIP 파일을 사용할 때 사용자 컴퓨터에 다운로드합니까?ZipInputStream에 대한 정보 검색

예를 들어 프로그램에서 ZipInputStream을 사용하여 zip 내용을 보면 어떻게 작동합니까? 그것은 지퍼를 다운로드하고 그것을 조사합니까 아니면?

답변

1

ZIP 파일 구조는 (LOC+Content)+ CEN처럼 보입니다. 여기서 LOC + Content는 헤더이고 각 개별 항목의 내용이며 CEN은 색인입니다.

ZipInputStream은 각 항목 앞에 오는 "로컬 파일 (LOC)"레코드만을 사용하여 입력 항목을 한 번에 한 항목 씩 순차적으로 읽습니다.

이전 항목에 대한 역 추적을 지원하지 않으므로 모든 항목의 목록을 가져 와서 일부 항목의 내용을 읽을 수 없습니다.

일반적으로 ZIP 파일의 끝에있는 중앙 디렉터리 (CEN) 레코드는 지원하지 않습니다. LOC 레코드 만 사용하고 CEN을 무시하는 것은 기술적으로 ZIP 파일을 읽는 올바른 방법이 아니지만 일반적으로 그다지 중요하지는 않습니다. 예를 들어, CEN은 일부 항목을 실제로 파일에서 제거하지 않고 삭제 된 것으로 표시 할 수있는 방법을 제공하므로 CEN을 무시하면 쓸모없는 항목을 읽게됩니다.

ZIP 파일의 항목 목록을 가져와야하는 경우 전체 파일을 검색해야합니다. 이는 HTTP를 통해 액세스되는 경우 전체 파일을 다운로드한다는 의미입니다. 이후에 새 HTTP 연결을 열고 필요한 항목까지 적어도 데이터 양을 다시 읽 (건너 뛰기)해야합니다.

전체 ZIP 파일을 먼저 로컬 컴퓨터로 다운로드 한 다음 로컬 파일로 작업하는 것이 더 나은 솔루션이 될 수 있습니다.

+0

하지만 전체 ZIP을 스캔하면 여전히 다운로드하여 볼 수 있습니다. 그러나 파일은 어디에서 다운로드 되었습니까? 또는 ZIP의 각 항목을 다운로드하고 살펴보고 삭제 한 후 다음 항목으로 이동합니까? – Veske

+1

@Veske : 모든 것이 메모리에서 발생합니다. 파일을 다운로드한다고해서 파일이 디스크의 아무 곳에 나 저장되지는 ​​않습니다. 브라우저가 Youtube 비디오를 디스크에 저장하지 않아도 재생할 수 있습니다. –