瀏覽代碼

Fix for HADOOP-87. Dont' pass large buffers through to deflater as this is inefficient.

git-svn-id: https://svn.apache.org/repos/asf/lucene/hadoop/trunk@387629 13f79535-47bb-0310-9956-ffa450edef68
Doug Cutting 19 年之前
父節點
當前提交
4d5fbc8ba2
共有 1 個文件被更改,包括 7 次插入10 次删除
  1. 7 10
      src/java/org/apache/hadoop/io/SequenceFile.java

+ 7 - 10
src/java/org/apache/hadoop/io/SequenceFile.java

@@ -57,9 +57,11 @@ public class SequenceFile {
     private Class valClass;
 
     private boolean deflateValues;
-    private DataOutputBuffer deflateIn = new DataOutputBuffer();
-    private byte[] deflateOut = new byte[8192];
     private Deflater deflater = new Deflater(Deflater.BEST_SPEED);
+    private DeflaterOutputStream deflateFilter =
+      new DeflaterOutputStream(buffer, deflater);
+    private DataOutputStream deflateOut =
+      new DataOutputStream(new BufferedOutputStream(deflateFilter));
 
     // Insert a globally unique 16-byte value every few entries, so that one
     // can seek into the middle of a file and then synchronize with record
@@ -155,15 +157,10 @@ public class SequenceFile {
         throw new IOException("zero length keys not allowed: " + key);
 
       if (deflateValues) {
-        deflateIn.reset();
-        val.write(deflateIn);
         deflater.reset();
-        deflater.setInput(deflateIn.getData(), 0, deflateIn.getLength());
-        deflater.finish();
-        while (!deflater.finished()) {
-          int count = deflater.deflate(deflateOut);
-          buffer.write(deflateOut, 0, count);
-        }
+        val.write(deflateOut);
+        deflateOut.flush();
+        deflateFilter.finish();
       } else {
         val.write(buffer);
       }