You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/07/07 20:03:21 UTC

svn commit: r1608537 - in /pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter: FlateFilter.java LZWFilter.java Predictor.java

Author: tilman
Date: Mon Jul  7 18:03:21 2014
New Revision: 1608537

URL: http://svn.apache.org/r1608537
Log:
PDFBOX-2194: get rid of ByteArrayOutputStream; code cleanup

Modified:
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java
    pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java?rev=1608537&r1=1608536&r2=1608537&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/FlateFilter.java Mon Jul  7 18:03:21 2014
@@ -91,8 +91,7 @@ public class FlateFilter implements Filt
                 ByteArrayOutputStream baos = new ByteArrayOutputStream();
                 decompress(compressedData, baos);
                 ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-                byte[] decodedData = Predictor.decodePredictor(predictor, colors, bitsPerPixel, columns, bais);
-                result.write(decodedData);
+                Predictor.decodePredictor(predictor, colors, bitsPerPixel, columns, bais, result);
                 result.flush();
                 baos.reset();
                 bais.reset();

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java?rev=1608537&r1=1608536&r2=1608537&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/LZWFilter.java Mon Jul  7 18:03:21 2014
@@ -98,8 +98,7 @@ public class LZWFilter implements Filter
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
             doLZWDecode(compressedData, baos);
             ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
-            byte[] decodedData = Predictor.decodePredictor(predictor, colors, bitsPerPixel, columns, bais);
-            result.write(decodedData);
+            Predictor.decodePredictor(predictor, colors, bitsPerPixel, columns, bais, result);
             result.flush();
             baos.reset();
             bais.reset();

Modified: pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java?rev=1608537&r1=1608536&r2=1608537&view=diff
==============================================================================
--- pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java (original)
+++ pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/filter/Predictor.java Mon Jul  7 18:03:21 2014
@@ -15,29 +15,24 @@
  */
 package org.apache.pdfbox.filter;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import org.apache.pdfbox.io.IOUtils;
 
 /**
- * Helper class to contain predictor decoding used by Flate and LZW filter.
+ * Helper class to contain predictor decoding used by Flate and LZW filter. 
  * To see the history, look at the FlateFilter class.
  */
 public class Predictor
 {
-    static byte[] decodePredictor(int predictor, int colors, int bitsPerComponent, int columns, InputStream data)
+    static void decodePredictor(int predictor, int colors, int bitsPerComponent, int columns, InputStream in, OutputStream out)
             throws IOException
     {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        byte[] buffer = new byte[2048];
         if (predictor == 1)
         {
             // no prediction
-            int i;
-            while ((i = data.read(buffer)) != -1)
-            {
-                baos.write(buffer, 0, i);
-            }
+            IOUtils.copy(in, out);
         }
         else
         {
@@ -48,20 +43,18 @@ public class Predictor
             byte[] actline = new byte[rowlength];
             byte[] lastline = new byte[rowlength];
 
-            boolean done = false;
             int linepredictor = predictor;
 
-            while (!done && data.available() > 0)
+            while (in.available() > 0)
             {
                 // test for PNG predictor; each value >= 10 (not only 15) indicates usage of PNG predictor
                 if (predictor >= 10)
                 {
                     // PNG predictor; each row starts with predictor type (0, 1, 2, 3, 4)
-                    linepredictor = data.read();// read per line predictor
+                    linepredictor = in.read();// read per line predictor
                     if (linepredictor == -1)
                     {
-                        done = true;// reached EOF
-                        break;
+                        return;
                     }
                     else
                     {
@@ -71,7 +64,7 @@ public class Predictor
 
                 // read line
                 int i, offset = 0;
-                while (offset < rowlength && ((i = data.read(actline, offset, rowlength - offset)) != -1))
+                while (offset < rowlength && ((i = in.read(actline, offset, rowlength - offset)) != -1))
                 {
                     offset += i;
                 }
@@ -152,11 +145,10 @@ public class Predictor
                     default:
                         break;
                 }
-                lastline = actline.clone();
-                baos.write(actline, 0, actline.length);
+                System.arraycopy(actline, 0, lastline, 0, rowlength);
+                out.write(actline, 0, actline.length);
             }
         }
-        return baos.toByteArray();
     }
 
 }