JarInputStream — 입력 스트림에서 JAR 읽기

JarInputStream — 입력 스트림에서 JAR 읽기

JarInputStream 클래스는 ZipInputStream을 확장해 입력 스트림에서 JAR 파일의 내용을 읽는 데 사용돼요. 선택적 Manifest 항목 읽기를 지원해요. Manifest는 JAR 파일과 그 항목들에 대한 메타 정보를 저장하는 데 쓰여요.

출처: Java API Reference

본문

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) — 인자와 동일하되 verifytrue일 때만 서명 검증을 시도해요.

메서드

  • 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과 동일하게 정의돼 있어요.

더 알아보기 (Learn more)