You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2020/09/20 12:53:40 UTC

svn commit: r1881870 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos: COSInputStream.java COSStream.java

Author: lehmi
Date: Sun Sep 20 12:53:39 2020
New Revision: 1881870

URL: http://svn.apache.org/viewvc?rev=1881870&view=rev
Log:
PDFBOX-4836: don't use ScratchFile within COSInputStream any more

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java?rev=1881870&r1=1881869&r2=1881870&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSInputStream.java Sun Sep 20 12:53:39 2020
@@ -30,10 +30,6 @@ import java.util.Set;
 import org.apache.pdfbox.filter.DecodeOptions;
 import org.apache.pdfbox.filter.DecodeResult;
 import org.apache.pdfbox.filter.Filter;
-import org.apache.pdfbox.io.RandomAccess;
-import org.apache.pdfbox.io.RandomAccessInputStream;
-import org.apache.pdfbox.io.RandomAccessOutputStream;
-import org.apache.pdfbox.io.ScratchFile;
 
 /**
  * An InputStream which reads from an encoded COS stream.
@@ -48,18 +44,27 @@ public final class COSInputStream extend
      * @param filters Filters to be applied.
      * @param parameters Filter parameters.
      * @param in Encoded input stream.
-     * @param scratchFile Scratch file to use, or null.
      * @return Decoded stream.
      * @throws IOException If the stream could not be read.
      */
-    static COSInputStream create(List<Filter> filters, COSDictionary parameters, InputStream in,
-                                 ScratchFile scratchFile) throws IOException
+    static COSInputStream create(List<Filter> filters, COSDictionary parameters, InputStream in)
+            throws IOException
     {
-        return create(filters, parameters, in, scratchFile, DecodeOptions.DEFAULT);
+        return create(filters, parameters, in, DecodeOptions.DEFAULT);
     }
 
+    /**
+     * Creates a new COSInputStream from an encoded input stream.
+     *
+     * @param filters Filters to be applied.
+     * @param parameters Filter parameters.
+     * @param in Encoded input stream.
+     * @param options decode options for the encoded stream
+     * @return Decoded stream.
+     * @throws IOException If the stream could not be read.
+     */
     static COSInputStream create(List<Filter> filters, COSDictionary parameters, InputStream in,
-                                 ScratchFile scratchFile, DecodeOptions options) throws IOException
+            DecodeOptions options) throws IOException
     {
         List<DecodeResult> results = new ArrayList<>();
         InputStream input = in;
@@ -70,32 +75,13 @@ public final class COSInputStream extend
             {
                 throw new IOException("Duplicate");
             }
+            ByteArrayOutputStream output = new ByteArrayOutputStream();
             // apply filters
             for (int i = 0; i < filters.size(); i++)
             {
-                if (scratchFile != null)
-                {
-                    // scratch file
-                    final RandomAccess buffer = scratchFile.createBuffer();
-                    DecodeResult result = filters.get(i).decode(input, new RandomAccessOutputStream(buffer), parameters, i, options);
-                    results.add(result);
-                    input = new RandomAccessInputStream(buffer)
-                    {
-                        @Override
-                        public void close() throws IOException
-                        {
-                            buffer.close();
-                        }
-                    };
-                }
-                else
-                {
-                    // in-memory
-                    ByteArrayOutputStream output = new ByteArrayOutputStream();
-                    DecodeResult result = filters.get(i).decode(input, output, parameters, i, options);
-                    results.add(result);
-                    input = new ByteArrayInputStream(output.toByteArray());
-                }
+                output.reset();
+                results.add(filters.get(i).decode(input, output, parameters, i, options));
+                input = new ByteArrayInputStream(output.toByteArray());
             }
         }
         return new COSInputStream(input, results);

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java?rev=1881870&r1=1881869&r2=1881870&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSStream.java Sun Sep 20 12:53:39 2020
@@ -221,7 +221,7 @@ public class COSStream extends COSDictio
     public COSInputStream createInputStream(DecodeOptions options) throws IOException
     {
         InputStream input = createRawInputStream();
-        return COSInputStream.create(getFilterList(), this, input, scratchFile, options);
+        return COSInputStream.create(getFilterList(), this, input, options);
     }
 
     /**
@@ -253,23 +253,18 @@ public class COSStream extends COSDictio
                 throw new IOException("Duplicate");
             }
             InputStream input = createRawInputStream();
-            ByteArrayOutputStream output = null;
+            ByteArrayOutputStream output = new ByteArrayOutputStream();
             // apply filters
             for (int i = 0; i < filterList.size(); i++)
             {
-                if (output != null)
+                if (i > 0)
                 {
                     input = new ByteArrayInputStream(output.toByteArray());
+                    output.reset();
                 }
-                output = new ByteArrayOutputStream();
                 filterList.get(i).decode(input, output, this, i, DecodeOptions.DEFAULT);
             }
-            if (output != null)
-            {
-                return new RandomAccessReadBuffer(output.toByteArray());
-            }
-            // shouldn't be reached at all
-            return null;
+            return new RandomAccessReadBuffer(output.toByteArray());
         }
     }