Package net.sf.jasperreports.engine.util
Class JRSwapFile
- java.lang.Object
-
- net.sf.jasperreports.engine.util.JRSwapFile
-
- Direct Known Subclasses:
JRConcurrentSwapFile
public class JRSwapFile extends Object
Swap file implementation that can be used as a disk cache for arbitrary binary data.Fixed-size blocks are allocated inside the swap file when a caller wants to write data. The caller receives a handle to the allocated area based on which it can read the data or free the area.
The implementation is thread-safe. I/O operations are performed in synchronized blocks, only one thread would do a read or write at one moment.
- Author:
- Lucian Chirita (lucianc@users.sourceforge.net)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
JRSwapFile.LongQueue
static class
JRSwapFile.SwapHandle
-
Field Summary
Fields Modifier and Type Field Description protected RandomAccessFile
file
static String
PROPERTY_DELETE_ON_EXIT
Property that instructs whetherdeleteOnExit
is to be requested for swap files.protected File
swapFile
-
Constructor Summary
Constructors Constructor Description JRSwapFile(String directory, int blockSize, int minGrowCount)
Creates a swap file.JRSwapFile(JasperReportsContext jasperReportsContext, String directory, int blockSize, int minGrowCount)
Creates a swap file.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
dispose()
Closes and deletes the swap file.protected void
finalize()
void
free(JRSwapFile.SwapHandle handle)
Frees an allocated area.protected void
freeBlocks(long[] offsets)
protected void
read(byte[] data, int dataOffset, int dataLength, long fileOffset)
byte[]
read(JRSwapFile.SwapHandle handle, boolean free)
Reads all the data from an allocated area.protected long[]
reserveFreeBlocks(int blockCount)
String
toString()
JRSwapFile.SwapHandle
write(byte[] data)
Allocates an area in the swap file and writes data in it.protected void
write(byte[] data, int dataSize, int dataOffset, long fileOffset)
-
-
-
Field Detail
-
PROPERTY_DELETE_ON_EXIT
public static final String PROPERTY_DELETE_ON_EXIT
Property that instructs whetherdeleteOnExit
is to be requested for swap files. Swap files are explicitly deleted ondispose()
and garbage collection.- See Also:
- Constant Field Values
-
swapFile
protected final File swapFile
-
file
protected final RandomAccessFile file
-
-
Constructor Detail
-
JRSwapFile
public JRSwapFile(String directory, int blockSize, int minGrowCount)
Creates a swap file. The file name is generated automatically.- Parameters:
directory
- the directory where the file should be created.blockSize
- the size of the blocks allocated by the swap fileminGrowCount
- the minimum number of blocks by which the swap file grows when full
-
JRSwapFile
public JRSwapFile(JasperReportsContext jasperReportsContext, String directory, int blockSize, int minGrowCount)
Creates a swap file. The file name is generated automatically.- Parameters:
jasperReportsContext
- the JasperReportsContext to read configuration from.directory
- the directory where the file should be created.blockSize
- the size of the blocks allocated by the swap fileminGrowCount
- the minimum number of blocks by which the swap file grows when full
-
-
Method Detail
-
write
public JRSwapFile.SwapHandle write(byte[] data) throws IOException
Allocates an area in the swap file and writes data in it.- Parameters:
data
- the data for which to allocate an area in the file- Returns:
- a handle to the allocated area
- Throws:
IOException
-
write
protected void write(byte[] data, int dataSize, int dataOffset, long fileOffset) throws IOException
- Throws:
IOException
-
read
public byte[] read(JRSwapFile.SwapHandle handle, boolean free) throws IOException
Reads all the data from an allocated area.- Parameters:
handle
- the allocated area handlefree
- whether to free the area after reading- Returns:
- the whole data saved in an allocated area
- Throws:
IOException
-
read
protected void read(byte[] data, int dataOffset, int dataLength, long fileOffset) throws IOException
- Throws:
IOException
-
free
public void free(JRSwapFile.SwapHandle handle)
Frees an allocated area.- Parameters:
handle
- the allocated area handle
-
dispose
public void dispose()
Closes and deletes the swap file.
-
finalize
protected void finalize() throws Throwable
-
reserveFreeBlocks
protected long[] reserveFreeBlocks(int blockCount) throws IOException
- Throws:
IOException
-
freeBlocks
protected void freeBlocks(long[] offsets)
-
-