소스 검색

Stream whole deflated objects in PackWriter

Instead of loading the entire object as a byte array and passing
that into the deflater, let the ObjectLoader copy the object onto
the DeflaterOutputStream.  This has the nice side effect of using
some sort of stride hack in the Sun implementation that may improve
compression performance.

Change-Id: I3f3d681b06af0da93ab96c75468e00e183ff32fe
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
tags/v0.9.1
Shawn O. Pearce 14 년 전
부모
커밋
a0fd06e5c2
1개의 변경된 파일8개의 추가작업 그리고 12개의 파일을 삭제
  1. 8
    12
      org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java

+ 8
- 12
org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackWriter.java 파일 보기

@@ -56,6 +56,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;

import org.eclipse.jgit.JGitText;
import org.eclipse.jgit.errors.CorruptObjectException;
@@ -752,19 +753,14 @@ public class PackWriter {
private void writeWholeObjectDeflate(PackOutputStream out,
final ObjectToPack otp) throws IOException {
final Deflater deflater = deflater();
final ObjectLoader loader = reader.open(otp, otp.getType());
final byte[] data = loader.getCachedBytes();
out.writeHeader(otp, data.length);
final ObjectLoader ldr = reader.open(otp, otp.getType());

out.writeHeader(otp, ldr.getSize());

deflater.reset();
deflater.setInput(data, 0, data.length);
deflater.finish();

byte[] buf = out.getCopyBuffer();
do {
final int n = deflater.deflate(buf, 0, buf.length);
if (n > 0)
out.write(buf, 0, n);
} while (!deflater.finished());
DeflaterOutputStream dst = new DeflaterOutputStream(out, deflater);
ldr.copyTo(dst);
dst.finish();
}

private Deflater deflater() {

Loading…
취소
저장