2017-03-19 2 views
0

아래 코드와 유사합니다. 다른 구현을 둘러 보면 대부분의 사람들이 바이트 복사를 수행하여 동일한 작업을 수행하는 것으로 보입니다. 파일을 팽창시키고 파일로 다시 인쇄하는 더 빠른 방법이 있습니까?파일 성능 향상을 위해 파일을 출력하십시오.

public static String unzipString(InputStream in) { 
try { 
    int length = (int) in.readUBits(16); 
    // Add extra byte to array when Inflater is set to true 
    byte[] data = in.read(length); 

    ByteArrayInputStream bin = new ByteArrayInputStream(input); 
    InflaterInputStream in = new InflaterInputStream(bin); 
    FileoutputStream bout = new FileoutputStream(this.file); 
    int b; 
    while ((b = in.read()) != -1) { 
     bout.write(b); 
    } 
    bout.close(); 

} catch (IOException io) { 
    return null; 
} 

}

+1

코드가 어색해 보입니다. 나는 그것이 언제까지 컴파일 될지 궁금해. – glee8e

+0

내 코드가 아닙니다. 그것은 내가 구글에서 가져온 예입니다. 바이트 단위의 출력 쓰기가 주어지면 위와 비슷합니다. 내 파일이 크고 파일 당 2 분이 걸려 압축 된 각 파일이 1600KB이고 압축되지 않은 위치가 26MB 인 곳을 기록하는 것처럼 보입니다. 바이트를 쓰는 Outputstream은 텐트의 긴 기둥 인 것 같습니다. – XanderLynn

+0

그 코드는 끔찍한 것 이상입니다. 다른 예를 시도해야합니다. 이미 쓰러진 집을 개선 할 수는 없습니다. – glee8e

답변

1

복사는 한 번에 한 바이트는 항상 파일을 처리 할 수있는 매우 느린 방법이 될 것입니다. 대신 8KB라고 말하는 버퍼를 사용하는 것이 좋습니다. BTW

try (FileOutputStream fout = new FileOutputStream(this.file)) { 
    byte[] bytes = new byte[8192]; 
    for (int len; (len = in.read(bytes)) != -1;) 
     fout.write(b, 0, len); 
} 

은 빨리 당신이 in를 래핑하지만 정확히 length 바이트를 읽어의 InputStream과 함께 처음부터 바이트 [] 복사를 피할 수 있도록합니다.

관련 문제