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 2023/11/21 16:29:21 UTC
svn commit: r1914017 - in /pdfbox/trunk/io/src: main/java/org/apache/pdfbox/io/ test/java/org/apache/pdfbox/io/
Author: lehmi
Date: Tue Nov 21 16:29:21 2023
New Revision: 1914017
URL: http://svn.apache.org/viewvc?rev=1914017&view=rev
Log:
PDFBOX-5711: add support for java.nio.file.Path
Modified:
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java
pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferedFileTest.java
pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFileTest.java
Modified: pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java?rev=1914017&r1=1914016&r2=1914017&view=diff
==============================================================================
--- pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java (original)
+++ pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadBufferedFile.java Tue Nov 21 16:29:21 2023
@@ -20,6 +20,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
+import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -70,7 +71,7 @@ public class RandomAccessReadBufferedFil
private int offsetWithinPage = 0;
private final FileChannel fileChannel;
- private final File file;
+ private final Path path;
private final long fileLength;
private long fileOffset = 0;
private boolean isClosed;
@@ -94,9 +95,20 @@ public class RandomAccessReadBufferedFil
*/
public RandomAccessReadBufferedFile( File file ) throws IOException
{
- this.file = file;
- fileChannel = FileChannel.open(file.toPath(), StandardOpenOption.READ);
- fileLength = file.length();
+ this(file.toPath());
+ }
+
+ /**
+ * Create a random access buffered file instance using the given path.
+ *
+ * @param path path of the file to be read.
+ * @throws IOException if something went wrong while accessing the given file.
+ */
+ public RandomAccessReadBufferedFile(Path path) throws IOException
+ {
+ this.path = path;
+ fileChannel = FileChannel.open(path, StandardOpenOption.READ);
+ fileLength = fileChannel.size();
seek(0);
}
@@ -269,7 +281,7 @@ public class RandomAccessReadBufferedFil
RandomAccessReadBufferedFile randomAccessReadBufferedFile = rafCopies.get(currentThreadID);
if (randomAccessReadBufferedFile == null || randomAccessReadBufferedFile.isClosed())
{
- randomAccessReadBufferedFile = new RandomAccessReadBufferedFile(file);
+ randomAccessReadBufferedFile = new RandomAccessReadBufferedFile(path);
rafCopies.put(currentThreadID, randomAccessReadBufferedFile);
}
return new RandomAccessReadView(randomAccessReadBufferedFile, startPosition, streamLength);
Modified: pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java?rev=1914017&r1=1914016&r2=1914017&view=diff
==============================================================================
--- pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java (original)
+++ pdfbox/trunk/io/src/main/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFile.java Tue Nov 21 16:29:21 2023
@@ -20,6 +20,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
+import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.EnumSet;
import java.util.Optional;
@@ -45,7 +46,7 @@ public class RandomAccessReadMemoryMappe
private final Consumer<? super ByteBuffer> unmapper;
/**
- * Default constructor.
+ * Create a random access memory mapped file instance for the file with the given name.
*
* @param filename the filename of the file to be read
*
@@ -57,7 +58,7 @@ public class RandomAccessReadMemoryMappe
}
/**
- * Default constructor.
+ * Create a random access memory mapped file instance for the given file.
*
* @param file the file to be read
*
@@ -65,13 +66,24 @@ public class RandomAccessReadMemoryMappe
*/
public RandomAccessReadMemoryMappedFile(File file) throws IOException
{
- fileChannel = FileChannel.open(file.toPath(), EnumSet.of(StandardOpenOption.READ));
+ this(file.toPath());
+ }
+
+ /**
+ * Create a random access memory mapped file instance using the given path.
+ *
+ * @param path path of the file to be read.
+ *
+ * @throws IOException If there is an IO error opening the file.
+ */
+ public RandomAccessReadMemoryMappedFile(Path path) throws IOException
+ {
+ fileChannel = FileChannel.open(path, EnumSet.of(StandardOpenOption.READ));
size = fileChannel.size();
// TODO only ints are allowed -> implement paging
if (size > Integer.MAX_VALUE)
{
- throw new IOException(getClass().getName()
- + " doesn't yet support files bigger than "
+ throw new IOException(getClass().getName() + " doesn't yet support files bigger than "
+ Integer.MAX_VALUE);
}
// map the whole file to memory
Modified: pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferedFileTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferedFileTest.java?rev=1914017&r1=1914016&r2=1914017&view=diff
==============================================================================
--- pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferedFileTest.java (original)
+++ pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadBufferedFileTest.java Tue Nov 21 16:29:21 2023
@@ -23,6 +23,7 @@ import static org.junit.jupiter.api.Asse
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.nio.file.Paths;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -122,6 +123,16 @@ class RandomAccessReadBufferedFileTest
}
}
+ @Test
+ void testPathConstructor() throws IOException, URISyntaxException
+ {
+ try (RandomAccessRead randomAccessSource = new RandomAccessReadBufferedFile(
+ Paths.get(getClass().getResource("RandomAccessReadFile1.txt").toURI())))
+ {
+ assertEquals(130, randomAccessSource.length());
+ }
+ }
+
@Test
void testPositionUnreadBytes() throws IOException, URISyntaxException
{
Modified: pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFileTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFileTest.java?rev=1914017&r1=1914016&r2=1914017&view=diff
==============================================================================
--- pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFileTest.java (original)
+++ pdfbox/trunk/io/src/test/java/org/apache/pdfbox/io/RandomAccessReadMemoryMappedFileTest.java Tue Nov 21 16:29:21 2023
@@ -26,6 +26,7 @@ import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import org.junit.jupiter.api.Assertions;
@@ -49,6 +50,16 @@ class RandomAccessReadMemoryMappedFileTe
}
}
+ @Test
+ void testPathConstructor() throws IOException, URISyntaxException
+ {
+ try (RandomAccessRead randomAccessSource = new RandomAccessReadMemoryMappedFile(
+ Paths.get(getClass().getResource("RandomAccessReadFile1.txt").toURI())))
+ {
+ assertEquals(130, randomAccessSource.length());
+ }
+ }
+
@Test
void testPositionRead() throws IOException, URISyntaxException
{