Rather than going through all of the indirection that makes up the DeflaterOutputStream, including the new object construction for it and the temporary buffer it allocates internally, we can pump data directly through our Deflater instance and use our existing 16 KB temporary "buf" for the transient storage as we compress data to the pack output stream. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../src/org/spearce/jgit/lib/PackWriter.java | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java b/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java index 2f34255..2d05c4e 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java +++ b/org.spearce.jgit/src/org/spearce/jgit/lib/PackWriter.java @@ -47,7 +47,6 @@ import java.util.Iterator; import java.util.List; import java.util.zip.Deflater; -import java.util.zip.DeflaterOutputStream; import org.spearce.jgit.errors.IncorrectObjectTypeException; import org.spearce.jgit.errors.MissingObjectException; @@ -699,12 +698,15 @@ private void writeWholeObject(final ObjectToPack otp) throws IOException { } else { final ObjectLoader loader = db.openObject(windowCursor, otp); final byte[] data = loader.getCachedBytes(); - final DeflaterOutputStream deflaterOut = new DeflaterOutputStream( - out, deflater); writeObjectHeader(otp.getType(), data.length); - deflaterOut.write(data); - deflaterOut.finish(); deflater.reset(); + deflater.setInput(data, 0, data.length); + deflater.finish(); + do { + final int n = deflater.deflate(buf, 0, buf.length); + if (n > 0) + out.write(buf, 0, n); + } while (!deflater.finished()); } } -- 1.6.2.1.471.g682837 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html