JarInputStream — 입력 스트림에서 JAR 읽기
JarInputStream — 입력 스트림에서 JAR 읽기
JarInputStream 클래스는 ZipInputStream을 확장해 입력 스트림에서 JAR 파일의 내용을 읽는 데 사용돼요. 선택적 Manifest 항목 읽기를 지원해요. Manifest는 JAR 파일과 그 항목들에 대한 메타 정보를 저장하는 데 쓰여요.
본문
public class JarInputStream extends ZipInputStream
Manifest 접근
getManifest()는 META-INF/MANIFEST.MF가 스트림의 첫 항목(또는 첫 항목이 META-INF/이고 두 번째 항목이 manifest라면 두 번째 항목)일 때 Manifest를 반환해요. getNextJarEntry()와 getNextEntry()는 스트림 시작 부분의 Manifest(와 필요시 META-INF/)를 건너뛰고 항목을 읽어요.
서명된 JAR 파일
JarInputStream은 다음 조건일 때 서명된 JAR 파일의 항목 서명을 검증해요.
- Manifest가 스트림의 첫 항목(또는 앞서 설명한 두 번째 항목)이고,
- 모든 서명 관련 항목이 Manifest 바로 뒤를 따를 때.
항목 입력 스트림을 끝까지 읽어 JarEntry가 완전히 검증된 후에는 JarEntry.getCertificates()로 인증서를, JarEntry.getCodeSigners()로 서명자를 얻을 수 있어요. 검증 과정은 서명자의 인증서 유효성을 검증하지 않는다는 점을 주의해야 해요. 호출자는 getCodeSigners()의 반환값을 검사해 서명을 신뢰할 수 있는지 추가로 판단해야 해요.
생성자
JarInputStream(InputStream in)— 새 스트림을 만들고 선택적 manifest를 읽어요. manifest가 있고 서명돼 있다면 서명 검증도 시도해요.JarInputStream(InputStream in, boolean verify)— 인자와 동일하되verify가true일 때만 서명 검증을 시도해요.
메서드
getManifest()— 조건을 만족할 때Manifest를 반환하고, 아니면null을 반환해요.getNextEntry()/getNextJarEntry()— 다음 항목을 읽고 스트림을 항목 데이터 시작 부분에 위치시켜요. 검증이 켜져 있으면 잘못된 서명에서 예외가 발생해요.read(byte[] b, int off, int len)— 현재 JAR 항목에서 바이트 배열로 읽고 inflate된 바이트 수를 반환해요. 검증이 켜져 있으면 현재 항목의 잘못된 서명이 항목 끝에 도달하기 전에 보고돼요.createZipEntry(String name)— 지정된 이름의 새JarEntry를 만들고 manifest 속성을 복사해요.
위 ZIP/JAR 헤더 상수(LOCSIG, CENSIG, ENDSIG, LOCHDR, CENHDR 등)는 JarEntry/JarFile과 동일하게 정의돼 있어요.