Deflater.setLevel()이 예상대로 작동하지 않습니다.Deflater.setLevel()이 작동합니까?
static void test1() throws Exception {
byte[] output = new byte[20];
Deflater compresser = new Deflater();
// compresser.setLevel(Deflater.BEST_COMPRESSION);
compresser.setInput("blah".getBytes("UTF-8"));
compresser.finish();
int len = compresser.deflate(output);
System.out.println("len="+ len+ " " +Arrays.toString(output));
}
나를 위해 확인 위의 작품 (자바 7) ,하지만 난 compresser.setLevel()
행의 주석을 해제 할 때, 그것은 나누기 (deflate()
반환 0 바이트). DEFAULT
을 제외한 모든 압축 수준에서도 마찬가지입니다. 좀 더 구체적으로, 레벨 세트가 생성자에서 (명시 적으로 또는 암시 적으로, 여기에서와 같이) 설정된 것과 동일 할 때만 (즉, 무해한) "작동"합니다. 즉 쓸모없는 경우에만 사용될 수 있습니다.
예 : Ideone을 참조하십시오.
This question이 같은 문제를 지적하고 있습니다. 대답은 기본적으로 다음과 같습니다. 설정자와 레벨을 설정하지 말고 생성자에서 수행하십시오. 만족스럽지 못한 IMO - setLevel()
은 왜 존재합니까? 부러 지거나 뭔가 빠졌습니까?
'Deflater' API에 버그가있는 것 같습니다. javadoc을 읽으면'.finish()'가 실제로하는 일이 명확하지 않습니다. 마지막 답변에서 제안 된 해결 방법이 효과가 있습니까? – fge