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 1334 2006-07-11 16:05:31 +0300 (Tue, 11 Jul 2006) lucianc $
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
           
 
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

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-2006 JasperSoft Corporation www.jaspersoft.com