자바의 압축은 Deflater와 Inflater를 이용한다.
Deflater에서 압축하기 위해서는 압축 수준과 압축 정책을 설정해야 한다.
- 압축 수준 ( Compression Level ) : 0 ~ 9
0 = NO_COMPRESSION, 1 = BEST_SPEED, 9 = BEST_COMPRESSION
- 압축 정책 ( Compression Strategy ) : 0 ~ 2
0 = DEFAULT, 1 = FILTERED, 2 = HUFFMAN
setInput()을 이용해 압축할 파일을 입력하고, 모두 입력하면 finish()를 호출한다.
그리고 finished()가 false이면 deflater()를 계속 호출해야한다.
Inflater에서 압축해제하려면 inflate() == 0이 될때 까지 압축해제를 반복한다.
Inflater / Deflater는 Low-Level에서 작동하므로,
압축은 DeflaterOutputStream과 그 하부클래스,
압축해제는 InflaterInputStream과 그 하부클래스로 사용한다.
하부클래스로는
GZIPStream : 압축형식
ZIPStream : 압축+Archive 형식
이 있다.
※ Archive에는 각 파일의 이름, 권한, 생성일, 마지막 수정일 등의 정보가 들어있다.
java.util.zip.Deflater
extends Object
압축을 위한 Low-Level 클래스이다.
- 전역 변수 ( Static Fields )
NO_COMPRESSION (0) : 압축 없음
BEST_SPEED (1) : 최고 속도 압축
BEST_COMPRESSION (9) : 최고 효율 압축
DEFAULT_COMPRESSION (-1) : 기본 압축
DEFAULT_STRATEGY (0) : 기본 전략 압축
FILTERED (1) : 작은 데이터로 구성된 데이터에 효과적인 전략의 압축
HUFFMAN_ONLY (2) : 허프먼 코딩 전용 압축 전략
java.util.zip.Inflater
extends Object
압축 해제를 위한 Low-Level 클래스이다.
java.util.zip.DeflaterOutputStream
extends FilterOuputStream
- 생성자 ( Constructor )
new DelfaterOutputStream(OutputStream[, Deflater, size, syncFlush])
- 지역 함수 ( Local Methods )
deflate() : 압축을 실행한다.
finish() : 출력 스트림에 출력을 종료한다. close()와 유사하지만 스트림이 닫히지 않는다는 점에서 다르다.
java.util.zip.InflaterInputStream
extends FilterInputStream
- 생성자 ( Constructor )
new InflaterInputStream(InputStream in[, Inflater, size])
- 지역 함수 ( Local Method )
available() : EOF에 도달했다면 0, 아니라면 1을 반환한다.
fill() : 압축해제한 데이터를 InputStream으로 보낸다.
java.util.zip.GZIPOutputStream
extends DeflaterOutputStream
- 생성자 ( Constructor )
new GZIPOutputStream(OutputStream[, size, syncFlush])
- 지역 함수 ( Local Method )
write(byteBuffer, offset, length) : 스트림에 바이트 데이터를 작성한다.
finish() : 압축 데이터 입력을 종료한다.
java.util.zip.GZIPInputStream
extends InflaterInputStream
- 생성자 ( Constructor )
new GZIPInputStream(InputStream in[, size])
- 지역 함수 ( Local Method )
read(byteBuffer, offset, length) : 압축해제한 데이터를 읽어 스트림에 작성한다.
close() : 스트림을 종료한다.
java.util.zip.ZIPOutputStream
extends DeflaterOutputStream
- 생성자 ( Constructor )
new ZipOutputStream(OutputStream out[, charset])
- 지역 변수 ( Local Method )
putNextEntry(ZipEntry) : 압축할 데이터를 추가한다.
setComment(comment) : 압축 파일에 코멘트를 추가한다.
setLevel(level) : 압축 레벨을 설정한다.
setMethod(method) : 압축 방법을 설정한다.
closeEntry() : 현재 엔트리 입력을 종료하고 다음 엔트리로 넘어간다.
write(byteBuffer, offset, length) : 엔트리에 바이트 데이터를 입력한다.
java.util.zip.ZIPInputStream
extends InflaterInputStream
- 생성자 ( Constructor )
new ZipInputStream(InputStream in[, charset])
- 지역 변수 ( Local Method )
available() : EOF에 도달했다면 0, 아니라면 1을 반환한다.
getNextEntry() : 다음 엔트리를 가져온다.
closeEntry() : 읽고 있던 엔트리를 닫는다.
read(byteBuffer, offset, length) : 바이트 데이터를 읽는다.
'3-2공부 > 네트워크프로그래밍' 카테고리의 다른 글
[Java] 네트워크 (0) | 2022.12.08 |
---|---|
[Java] 암호화 (0) | 2022.10.22 |
[Java] Serialize, 직렬화 (0) | 2022.10.22 |
[Java] Writer (0) | 2022.10.22 |
[Java] Reader (0) | 2022.10.22 |