원래

2016-09-30 3 views
0

나는 inputstream의원래

public InputStream compress(InputStream inputStream) throws IOException { 
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
    try { 
     GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream); 
     byte[] inBytes = IOUtils.toByteArray(inputStream); 
     gzipOutputStream.write(inBytes); 
     ByteArrayInputStream retStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); 
     gzipOutputStream.close(); 
     return retStream; 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } 

} 

그것은 비슷한 크기의 스트림을 반환를 압축 작성한이 코드의의 유사한 크기를 반환합니다. 코드에 버그가 있습니까?

@Test 
public void test() throws IOException { 
    try { 
     in = this.getClass().getResourceAsStream("/testimage.jpg"); 
    } catch (NullPointerException e) { 
     logger.log(Level.SEVERE, "Exception reading file in test - ", e); 
    } 
    compress(in); 
} 
+0

어떤 종류의 데이터를 압축하려고합니까? 텍스트, 이미지, 오디오? 몇 가지 예를 들어 주시겠습니까? 일부 입력 및 출력 크기? –

+0

압축 된 아카이브의 출력 크기를 어떻게 보장할지는 없습니다. 경우에 따라 원본보다 클 수 있습니다. 대부분의 그림, mp3, .mpg 파일은 압축되지 않습니다. 데이터가 이미 중복되지 않았기 때문입니다. – Dariusz

+0

이미지 파일을 압축하려고했습니다. –

답변

1

JPEG (.JPG) 파일 이미 압축되어 전달 입력 스트림은 시험을 통해 이미지 파일이다. 다시 압축하려고하면 거의 확장되지 않습니다.

1

이미 압축 된 내용을 압축하면 훨씬 작을 수는 없습니다. 무한 압축이 불가능합니다. JPEG는 이미 느슨하게 적용되어 있습니다. GZIP 비트 맵 또는 간단한 텍스트 파일을 사용하면 차이점을 알 수 있습니다.