Java 클래스 ZipOutputStream을 통해 하나의 Big 파일 (~ 450 Mbyte)을 압축해야합니다. 이 큰 치수 때문에 JVM 힙 공간의 "OutOfMemory"오류가 발생합니다. 이것은 "zos.write (...)"메서드가 압축하기 전에 내부 바이트 배열로 압축 할 모든 파일 내용을 저장하기 때문에 발생합니다.Java로 ZIP에서 큰 파일을 압축하려면
origin = new BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(filePath);
zos.putNextEntry(entry);
int count;
while ((count = origin.read(data, 0, BUFFER)) != -1)
{
zos.write(data, 0, count);
}
origin.close();
자연 솔루션은 JVM의 힙 메모리 공간을 확대하는 것입니다,하지만 난 스트리밍 방식으로이 데이터를 쓸 수있는 방법이 있는지 알고 싶습니다. 높은 압축률을 필요로하지 않으므로 알고리즘을 변경할 수도 있습니다.
아무에게도 아이디어가 있습니까?
BUFFER의 크기는 얼마입니까? –
내가 작성한대로 2048 – robob