net.sf.jasperreports.engine.util
Class JRSwapFile

java.lang.Object
  extended by net.sf.jasperreports.engine.util.JRSwapFile
Direct Known Subclasses:
JRConcurrentSwapFile

public class JRSwapFile
extends java.lang.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.

Version:
$Id: JRSwapFile.java 5180 2012-03-29 13:23:12Z teodord $
Author:
Lucian Chirita (lucianc@users.sourceforge.net)

Nested Class Summary
protected static class JRSwapFile.LongQueue
           
static class JRSwapFile.SwapHandle
           
 
Field Summary
protected  java.io.RandomAccessFile file
           
static java.lang.String PROPERTY_DELETE_ON_EXIT
          Property that instructs whether deleteOnExit is to be requested for swap files.
 
Constructor Summary
JRSwapFile(java.lang.String directory, int blockSize, int minGrowCount)
          Creates a swap file.
 
Method Summary
 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)
           
 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)
           
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PROPERTY_DELETE_ON_EXIT

public static final java.lang.String PROPERTY_DELETE_ON_EXIT
Property that instructs whether deleteOnExit is to be requested for swap files. Swap files are explicitly deleted on dispose() and garbage collection.

See Also:
Constant Field Values

file

protected final java.io.RandomAccessFile file
Constructor Detail

JRSwapFile

public JRSwapFile(java.lang.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 file
minGrowCount - the minimum number of blocks by which the swap file grows when full
Method Detail

write

public JRSwapFile.SwapHandle write(byte[] data)
                            throws java.io.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:
java.io.IOException

write

protected void write(byte[] data,
                     int dataSize,
                     int dataOffset,
                     long fileOffset)
              throws java.io.IOException
Throws:
java.io.IOException

read

public byte[] read(JRSwapFile.SwapHandle handle,
                   boolean free)
            throws java.io.IOException
Reads all the data from an allocated area.

Parameters:
handle - the allocated area handle
free - whether to free the area after reading
Returns:
the whole data saved in an allocated area
Throws:
java.io.IOException

read

protected void read(byte[] data,
                    int dataOffset,
                    int dataLength,
                    long fileOffset)
             throws java.io.IOException
Throws:
java.io.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 java.lang.Throwable
Overrides:
finalize in class java.lang.Object
Throws:
java.lang.Throwable

reserveFreeBlocks

protected long[] reserveFreeBlocks(int blockCount)
                            throws java.io.IOException
Throws:
java.io.IOException

freeBlocks

protected void freeBlocks(long[] offsets)


© 2001-2010 Jaspersoft Corporation www.jaspersoft.com