Class 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)
    • 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 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 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 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.
      • reserveFreeBlocks

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

        protected void freeBlocks​(long[] offsets)