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/06/02 15:39:21 UTC
svn commit: r1878398 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: cos/ io/ pdfparser/
Author: lehmi
Date: Tue Jun 2 15:39:20 2020
New Revision: 1878398
URL: http://svn.apache.org/viewvc?rev=1878398&view=rev
Log:
PDFBOX-4836: delegate the creation of the view to the RandomAccessRead implementing classes to support optimized implementations
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/InputStreamRandomAccessRead.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFile.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadView.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFileBuffer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSParser.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/ICOSParser.java Tue Jun 2 15:39:20 2020
@@ -33,12 +33,14 @@ public interface ICOSParser
public COSBase dereferenceCOSObject(COSObject obj) throws IOException;
/**
- * Create a random access read view starting at the given position with the given length.
+ * Creates a random access read view starting at the given position with the given length.
*
* @param startPosition start position within the underlying random access read
* @param streamLength stream length
* @return the random access read view
+ * @throws IOException if something went wrong when creating the view for the RandomAccessRead
*/
- public RandomAccessReadView createRandomAccessReadView(long startPosition, long streamLength);
+ public RandomAccessReadView createRandomAccessReadView(long startPosition, long streamLength)
+ throws IOException;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/InputStreamRandomAccessRead.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/InputStreamRandomAccessRead.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/InputStreamRandomAccessRead.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/InputStreamRandomAccessRead.java Tue Jun 2 15:39:20 2020
@@ -166,4 +166,10 @@ public final class InputStreamRandomAcce
{
throw new UnsupportedOperationException(getClass().getName() + ".length is not supported!");
}
+
+ @Override
+ public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException
+ {
+ throw new IOException(getClass().getName() + ".createView isn't supported.");
+ }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFile.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFile.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFile.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessBufferedFile.java Tue Jun 2 15:39:20 2020
@@ -257,4 +257,10 @@ public class RandomAccessBufferedFile im
{
return peek() == -1;
}
+
+ @Override
+ public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException
+ {
+ return new RandomAccessReadView(this, startPosition, streamLength);
+ }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessRead.java Tue Jun 2 15:39:20 2020
@@ -194,4 +194,14 @@ public interface RandomAccessRead extend
rewind(len);
}
+ /**
+ * Creates a random access read view starting at the given position with the given length.
+ *
+ * @param startPosition start position within the underlying random access read
+ * @param streamLength stream length
+ * @return the random access read view
+ * @throws IOException if something went wrong when creating the view for the RandomAccessRead
+ *
+ */
+ RandomAccessReadView createView(long startPosition, long streamLength) throws IOException;
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadBuffer.java Tue Jun 2 15:39:20 2020
@@ -115,6 +115,22 @@ public class RandomAccessReadBuffer impl
seek(0);
}
+ private RandomAccessReadBuffer(RandomAccessReadBuffer parent)
+ {
+ chunkSize = parent.chunkSize;
+ size = parent.size;
+ bufferListMaxIndex = parent.bufferListMaxIndex;
+ bufferList = new ArrayList<>(parent.bufferList.size());
+ for (ByteBuffer buffer : parent.bufferList)
+ {
+ ByteBuffer newBuffer = buffer.duplicate();
+ newBuffer.rewind();
+ bufferList.add(newBuffer);
+ }
+ currentBuffer = bufferList.get(0);
+
+ }
+
@Override
public RandomAccessReadBuffer clone()
{
@@ -398,4 +414,11 @@ public class RandomAccessReadBuffer impl
return read(b, 0, b.length);
}
+ @Override
+ public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException
+ {
+ return new RandomAccessReadView(new RandomAccessReadBuffer(this), startPosition,
+ streamLength);
+ }
+
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java Tue Jun 2 15:39:20 2020
@@ -18,7 +18,7 @@ package org.apache.pdfbox.io;
import java.io.File;
import java.io.IOException;
-import java.nio.MappedByteBuffer;
+import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.StandardOpenOption;
import java.util.EnumSet;
@@ -31,13 +31,13 @@ public class RandomAccessReadMemoryMappe
{
// mapped byte buffer
- private MappedByteBuffer mappedByteBuffer;
+ private ByteBuffer mappedByteBuffer;
// size of the whole file
private final long size;
// file channel of the file to be read
- private final FileChannel fileChannel;
+ private FileChannel fileChannel;
/**
* Default constructor.
@@ -65,13 +65,23 @@ public class RandomAccessReadMemoryMappe
mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, size);
}
+ private RandomAccessReadMemoryMappedFile(RandomAccessReadMemoryMappedFile parent)
+ {
+ mappedByteBuffer = parent.mappedByteBuffer.duplicate();
+ size = parent.size;
+ mappedByteBuffer.rewind();
+ }
+
/**
* {@inheritDoc}
*/
@Override
public void close() throws IOException
{
- fileChannel.close();
+ if (fileChannel != null)
+ {
+ fileChannel.close();
+ }
mappedByteBuffer = null;
}
@@ -156,7 +166,7 @@ public class RandomAccessReadMemoryMappe
@Override
public boolean isClosed()
{
- return !fileChannel.isOpen();
+ return mappedByteBuffer == null;
}
/**
@@ -210,4 +220,11 @@ public class RandomAccessReadMemoryMappe
{
return read(b, 0, b.length);
}
+
+ @Override
+ public RandomAccessReadView createView(long startPosition, long streamLength)
+ {
+ return new RandomAccessReadView(new RandomAccessReadMemoryMappedFile(this), startPosition,
+ streamLength);
+ }
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadView.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadView.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadView.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/RandomAccessReadView.java Tue Jun 2 15:39:20 2020
@@ -215,4 +215,10 @@ public class RandomAccessReadView implem
}
}
+ @Override
+ public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException
+ {
+ throw new IOException(getClass().getName() + ".createView isn't supported.");
+ }
+
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFileBuffer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFileBuffer.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFileBuffer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/io/ScratchFileBuffer.java Tue Jun 2 15:39:20 2020
@@ -504,4 +504,11 @@ class ScratchFileBuffer implements Rando
super.finalize();
}
}
+
+ @Override
+ public RandomAccessReadView createView(long startPosition, long streamLength) throws IOException
+ {
+ return new RandomAccessReadView(this, startPosition, streamLength);
+ }
+
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java?rev=1878398&r1=1878397&r2=1878398&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Tue Jun 2 15:39:20 2020
@@ -573,8 +573,9 @@ public class COSParser extends BaseParse
@Override
public RandomAccessReadView createRandomAccessReadView(long startPosition, long streamLength)
+ throws IOException
{
- return new RandomAccessReadView(source, startPosition, streamLength);
+ return source.createView(startPosition, streamLength);
}
/**