Package net.sf.jasperreports.engine.util
Class JRSwapFile
java.lang.Object
net.sf.jasperreports.engine.util.JRSwapFile
- Direct Known Subclasses:
JRConcurrentSwapFile
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 ClassesModifier and TypeClassDescriptionprotected static classstatic class -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final RandomAccessFilestatic final StringProperty that instructs whetherdeleteOnExitis to be requested for swap files.protected final File -
Constructor Summary
ConstructorsConstructorDescriptionJRSwapFile(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
Modifier and TypeMethodDescriptionvoiddispose()Closes and deletes the swap file.protected voidfinalize()voidfree(JRSwapFile.SwapHandle handle) Frees an allocated area.protected voidfreeBlocks(long[] offsets) protected voidread(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) toString()write(byte[] data) Allocates an area in the swap file and writes data in it.protected voidwrite(byte[] data, int dataSize, int dataOffset, long fileOffset)
-
Field Details
-
PROPERTY_DELETE_ON_EXIT
Property that instructs whetherdeleteOnExitis to be requested for swap files. Swap files are explicitly deleted ondispose()and garbage collection.- See Also:
-
swapFile
-
file
-
-
Constructor Details
-
JRSwapFile
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 Details
-
toString
-
write
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
- Throws:
IOException
-
read
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
Frees an allocated area.- Parameters:
handle- the allocated area handle
-
dispose
public void dispose()Closes and deletes the swap file. -
finalize
-
reserveFreeBlocks
- Throws:
IOException
-
freeBlocks
protected void freeBlocks(long[] offsets)
-