1 package shark 2 3 import java.io.Closeable 4 import java.io.File 5 6 /** 7 * Hprof is deprecated, and we offer partial backward compatibility. Any code that was 8 * previously using HprofReader directly now has to call [StreamingHprofReader.readerFor] or 9 * [HprofRandomAcccessReader.readerFor] 10 */ 11 @Deprecated("Replaced by HprofStreamingReader.readerFor or HprofRandomAccessReader.openReaderFor") 12 class Hprof private constructor( 13 val file: File, 14 val header: HprofHeader 15 ) : Closeable { 16 17 val reader: HprofReader = HprofReader(this) 18 19 val heapDumpTimestamp: Long 20 get() = header.heapDumpTimestamp 21 22 val hprofVersion: HprofVersion 23 get() = HprofVersion.valueOf(header.version.name) 24 25 val fileLength: Long 26 get() = file.length() 27 28 private val closeables = mutableListOf<Closeable>() 29 30 /** 31 * Maintains backward compatibility because [Hprof.open] returns a closeable. This allows 32 * consuming libraries to attach a closeable that will be closed whe [Hprof] is closed. 33 */ attachClosablenull34 fun attachClosable(closeable: Closeable) { 35 closeables += closeable 36 } 37 closenull38 override fun close() { 39 closeables.forEach { it.close() } 40 } 41 42 @Deprecated(message = "Moved to top level class", replaceWith = ReplaceWith("shark.HprofVersion")) 43 enum class HprofVersion { 44 JDK1_2_BETA3, 45 JDK1_2_BETA4, 46 JDK_6, 47 ANDROID; 48 49 val versionString: String 50 get() = shark.HprofVersion.valueOf(name).versionString 51 } 52 53 companion object { 54 @Deprecated( 55 message = "Replaced by HprofStreamingReader.readerFor or HprofRandomAccessReader.openReaderFor" 56 ) opennull57 fun open(hprofFile: File): Hprof = Hprof(hprofFile, HprofHeader.parseHeaderOf(hprofFile)) 58 } 59 }