3-2공부/네트워크프로그래밍

[Java] 압축

KGW2027 2022. 10. 22. 16:53
728x90
반응형

자바의 압축은 DeflaterInflater를 이용한다.

 

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) : 바이트 데이터를 읽는다.

 


 

728x90
반응형

'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