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)
  • Field Details

    • PROPERTY_DELETE_ON_EXIT

      public static final 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:
    • swapFile

      protected final File swapFile
    • file

      protected final RandomAccessFile file
  • Constructor Details

    • 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 file
      minGrowCount - 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 file
      minGrowCount - the minimum number of blocks by which the swap file grows when full
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • 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 handle
      free - 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
      Overrides:
      finalize in class Object
      Throws:
      Throwable
    • reserveFreeBlocks

      protected long[] reserveFreeBlocks(int blockCount) throws IOException
      Throws:
      IOException
    • freeBlocks

      protected void freeBlocks(long[] offsets)