Package com.itextpdf.io.source
Class RandomAccessSourceFactory
- java.lang.Object
-
- com.itextpdf.io.source.RandomAccessSourceFactory
-
public final class RandomAccessSourceFactory extends java.lang.Object
Factory to createIRandomAccessSource
objects based on various types of sources
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
exclusivelyLockFile
Whether the underlying file should have a RW lock on it or just an R lockprivate boolean
forceRead
Whether the full content of the source should be read into memory at constructionprivate static boolean
forceReadDefaultValue
The default value for the forceRead flagprivate boolean
usePlainRandomAccess
WhetherRandomAccessFile
should be used instead of aFileChannel
, where applicable
-
Constructor Summary
Constructors Constructor Description RandomAccessSourceFactory()
Creates a factory that will give preference to accessing the underling data source using memory mapped files
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description IRandomAccessSource
createBestSource(java.lang.String filename)
Creates aIRandomAccessSource
based on a filename string.IRandomAccessSource
createBestSource(java.nio.channels.FileChannel channel)
Creates aIRandomAccessSource
based on memory mapping a file channel.private IRandomAccessSource
createByReadingToMemory(java.io.InputStream stream)
Creates a newIRandomAccessSource
by reading the specified file/resource into memoryprivate IRandomAccessSource
createByReadingToMemory(java.lang.String filename)
Creates a newIRandomAccessSource
by reading the specified file/resource into memoryIRandomAccessSource
createRanged(IRandomAccessSource source, long[] ranges)
IRandomAccessSource
createSource(byte[] data)
Creates aIRandomAccessSource
based on a byte arrayIRandomAccessSource
createSource(java.io.InputStream inputStream)
Creates aIRandomAccessSource
based on anInputStream
.IRandomAccessSource
createSource(java.io.RandomAccessFile raf)
IRandomAccessSource
createSource(java.net.URL url)
Creates aIRandomAccessSource
based on a URL.private static boolean
exceptionIsMapFailureException(java.io.IOException e)
Utility method that determines whether a given java.io.IOException is the result of a failure to map a memory mapped file.IRandomAccessSource
extractOrCreateSource(java.io.InputStream inputStream)
Creates or extracts aIRandomAccessSource
based on anInputStream
.RandomAccessSourceFactory
setExclusivelyLockFile(boolean exclusivelyLockFile)
RandomAccessSourceFactory
setForceRead(boolean forceRead)
Determines whether the full content of the source will be read into memorystatic void
setForceReadDefaultValue(boolean forceRead)
Determines the default value for the forceRead flagRandomAccessSourceFactory
setUsePlainRandomAccess(boolean usePlainRandomAccess)
Determines whetherRandomAccessFile
should be used as the primary data access mechanism
-
-
-
Field Detail
-
forceReadDefaultValue
private static boolean forceReadDefaultValue
The default value for the forceRead flag
-
forceRead
private boolean forceRead
Whether the full content of the source should be read into memory at construction
-
usePlainRandomAccess
private boolean usePlainRandomAccess
WhetherRandomAccessFile
should be used instead of aFileChannel
, where applicable
-
exclusivelyLockFile
private boolean exclusivelyLockFile
Whether the underlying file should have a RW lock on it or just an R lock
-
-
Method Detail
-
setForceReadDefaultValue
public static void setForceReadDefaultValue(boolean forceRead)
Determines the default value for the forceRead flag- Parameters:
forceRead
- true if by default the full content will be read, false otherwise
-
setForceRead
public RandomAccessSourceFactory setForceRead(boolean forceRead)
Determines whether the full content of the source will be read into memory- Parameters:
forceRead
- true if the full content will be read, false otherwise- Returns:
- this object (this allows chaining of method calls)
-
setUsePlainRandomAccess
public RandomAccessSourceFactory setUsePlainRandomAccess(boolean usePlainRandomAccess)
Determines whetherRandomAccessFile
should be used as the primary data access mechanism- Parameters:
usePlainRandomAccess
- whetherRandomAccessFile
should be used as the primary data access mechanism- Returns:
- this object (this allows chaining of method calls)
-
setExclusivelyLockFile
public RandomAccessSourceFactory setExclusivelyLockFile(boolean exclusivelyLockFile)
-
createSource
public IRandomAccessSource createSource(byte[] data)
Creates aIRandomAccessSource
based on a byte array- Parameters:
data
- the byte array- Returns:
- the newly created
IRandomAccessSource
-
createSource
public IRandomAccessSource createSource(java.io.RandomAccessFile raf) throws java.io.IOException
- Throws:
java.io.IOException
-
createSource
public IRandomAccessSource createSource(java.net.URL url) throws java.io.IOException
Creates aIRandomAccessSource
based on a URL. The data available at the URL is read into memory and used as the source for theIRandomAccessSource
- Parameters:
url
- the url to read from- Returns:
- the newly created
IRandomAccessSource
- Throws:
java.io.IOException
- in case of any I/O error.
-
extractOrCreateSource
public IRandomAccessSource extractOrCreateSource(java.io.InputStream inputStream) throws java.io.IOException
Creates or extracts aIRandomAccessSource
based on anInputStream
.If the InputStream is an instance of
RASInputStream
then extracts the source from it. Otherwise The full content of the InputStream is read into memory and used as the source for theIRandomAccessSource
- Parameters:
inputStream
- the stream to read from- Returns:
- the newly created or extracted
IRandomAccessSource
- Throws:
java.io.IOException
- in case of any I/O error.
-
createSource
public IRandomAccessSource createSource(java.io.InputStream inputStream) throws java.io.IOException
Creates aIRandomAccessSource
based on anInputStream
.The full content of the InputStream is read into memory and used as the source for the
IRandomAccessSource
- Parameters:
inputStream
- the stream to read from- Returns:
- the newly created
IRandomAccessSource
- Throws:
java.io.IOException
- in case of any I/O error.
-
createBestSource
public IRandomAccessSource createBestSource(java.lang.String filename) throws java.io.IOException
Creates aIRandomAccessSource
based on a filename string. If the filename describes a URL, a URL based source is created If the filename describes a file on disk, the contents may be read into memory (ifforceRead
is true), opened using memory mapped file channel (if usePlainRandomAccess is false), or opened usingRandomAccessFile
access (if usePlainRandomAccess is true) This call will automatically fail over to usingRandomAccessFile
if the memory map operation fails- Parameters:
filename
- the name of the file or resource to create theIRandomAccessSource
for- Returns:
- the newly created
IRandomAccessSource
- Throws:
java.io.IOException
- in case of any I/O error
-
createBestSource
public IRandomAccessSource createBestSource(java.nio.channels.FileChannel channel) throws java.io.IOException
Creates aIRandomAccessSource
based on memory mapping a file channel. Unless you are explicitly working with aFileChannel
already, it is better to usecreateBestSource(String)
. If the file is large, it will be opened using a paging strategy.- Parameters:
channel
- the name of the file or resource to create theIRandomAccessSource
for- Returns:
- the newly created
IRandomAccessSource
- Throws:
java.io.IOException
- in case of any I/O error
-
createRanged
public IRandomAccessSource createRanged(IRandomAccessSource source, long[] ranges) throws java.io.IOException
- Throws:
java.io.IOException
-
createByReadingToMemory
private IRandomAccessSource createByReadingToMemory(java.lang.String filename) throws java.io.IOException
Creates a newIRandomAccessSource
by reading the specified file/resource into memory- Parameters:
filename
- the name of the resource to read- Returns:
- the newly created
IRandomAccessSource
- Throws:
java.io.IOException
- if reading the underling file or stream fails
-
createByReadingToMemory
private IRandomAccessSource createByReadingToMemory(java.io.InputStream stream) throws java.io.IOException
Creates a newIRandomAccessSource
by reading the specified file/resource into memory- Parameters:
stream
- the name of the resource to read- Returns:
- the newly created
IRandomAccessSource
- Throws:
java.io.IOException
- if reading the underling file or stream fails
-
exceptionIsMapFailureException
private static boolean exceptionIsMapFailureException(java.io.IOException e)
Utility method that determines whether a given java.io.IOException is the result of a failure to map a memory mapped file. It would be better if the runtime provided a special exception for this case, but it doesn't, so we have to rely on parsing the exception message.- Parameters:
e
- the exception to check- Returns:
- true if the exception was the result of a failure to map a memory mapped file
-
-