Class ChunkedGZIPRandomAccessFile

java.lang.Object
java.io.RandomAccessFile
org.eclipse.mat.hprof.ChunkedGZIPRandomAccessFile
All Implemented Interfaces:
Closeable, DataInput, DataOutput, AutoCloseable

public class ChunkedGZIPRandomAccessFile extends RandomAccessFile
This class can be used to get random access to chunked gzipped hprof files like the openjdk can create them. As described in https://tools.ietf.org/html/rfc1952, a gzip file consists of a number of "members". The openjdk gzipped dumps have a maximum size of data compressed in each "member". This makes it possible to start decompression at each start of a member. In case of the openjdk dumps the maximum size of uncompressed data in a "member" is stored in a comment in the first member. This is used to detect those files (without having to uncompress the whole file).
  • Method Details

    • seek

      public void seek(long pos) throws IOException
      Overrides:
      seek in class RandomAccessFile
      Throws:
      IOException
    • getFilePointer

      public long getFilePointer()
      Overrides:
      getFilePointer in class RandomAccessFile
    • length

      public long length()
      Unknown length is Long.MAX_VALUE
      Overrides:
      length in class RandomAccessFile
    • read

      public int read() throws IOException
      Overrides:
      read in class RandomAccessFile
      Throws:
      IOException
    • read

      public int read(byte[] buf) throws IOException
      Overrides:
      read in class RandomAccessFile
      Throws:
      IOException
    • read

      public int read(byte[] buf, int off, int len) throws IOException
      Overrides:
      read in class RandomAccessFile
      Throws:
      IOException
    • close

      public void close() throws IOException
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class RandomAccessFile
      Throws:
      IOException
    • getLastPhysicalReadPosition

      public long getLastPhysicalReadPosition()
      Returns an estimation of the last physical position we read from.
      Returns:
      The last physical position.
    • read

      public int read(long offset, byte[] b, int off, int len) throws IOException
      Reads bytes from the gzip file.
      Parameters:
      offset - The offset from which to start the read.
      b - The array to read into.
      off - The offset in the array to use.
      len - The number of bytes to read at most.
      Returns:
      The number of bytes read or -1 if we are at the end of the file.
      Throws:
      IOException - On error.
    • isChunkedGZIPFile

      public static boolean isChunkedGZIPFile(RandomAccessFile raf) throws IOException
      Checks if the given file is a chunked gzipped file.
      Parameters:
      raf - The file to check.
      Returns:
      true if the file is a chunked gzip file.
      Throws:
      IOException - On error.
    • get

      public static ChunkedGZIPRandomAccessFile get(RandomAccessFile raf, File file, String prefix) throws IOException
      Returns the random access file for the given file or null if not supported for the file.
      Parameters:
      raf - The random access file.
      file - The file name.
      prefix - The prefix of the snapshot.
      Returns:
      The random access file or null.
      Throws:
      IOException - problem reading the file
    • forget

      public static void forget(File file)
      Forget all cached version of the file.
      Parameters:
      file - The file to forget.
    • compressFileChunked

      public static void compressFileChunked(File toCompress, File compressed) throws IOException
      Compressed a file to a chunked gzipped file.
      Parameters:
      toCompress - The file to gzip.
      compressed - The gzipped file.
      Throws:
      IOException - On error.
    • compressFileUnchunked

      public static void compressFileUnchunked(File toCompress, File compressed) throws IOException
      Compressed a file to an unchunked gzipped file, but with more header fields compared to GZIPOutputStream.
      Parameters:
      toCompress - The file to gzip.
      compressed - The gzipped file.
      Throws:
      IOException - On error.
    • compressFileChunked2

      public static void compressFileChunked2(File toCompress, File compressed) throws IOException
      Compressed a file to a chunked gzipped file. Note that there is no header CRC.
      Parameters:
      toCompress - The file to gzip.
      compressed - The gzipped file.
      Throws:
      IOException - On error.