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();
}
}