package Ġcom . dis ple e . compress . type Ċ Ċ import Ġcom . dis ple e . io . impl . Input Buffer Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . util . zip . GZIP InputStream Ċ import Ġjava . util . zip . GZIP OutputStream Ċ import Ġjava . util . zip . Inflater Ċ Ċ object ĠG ZIP Compressor Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġinflater : ĠIn flater ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġgzip Buffer Ġ= ĠByteArray ( 1 0 0 0 _ 0 0 0 ) Ġ// because Ġin Ġ 3 1 7 ĠJ age x Ġstores Ġa Ġlot Ġof Ġdata Ġin Ġone Ġfile ĊĊĠĠĠ Ġfun Ġinf late ( buffer : ĠInput Buffer , Ġdata : ĠByteArray ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġbuffer . raw () ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġbuffer . offset ĊĠĠĠĠĠĠĠ Ġif Ġ( bytes [ offset ]. toInt () Ġ!= Ġ 3 1 Ġ|| Ġbytes [ offset Ġ+ Ġ 1 ]. toInt () Ġ!= Ġ- 1 1 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġthis . in flater Ġ?: ĠIn flater ( true ). also Ġ{ Ġinflater Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . setInput ( bytes , Ġoffset Ġ+ Ġ 1 0 , Ġbytes . size Ġ- Ġ( 1 0 Ġ+ Ġoffset Ġ+ Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . inflate ( data ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater . reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinflater . reset () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdef late ( data : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompressed Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgzip OutputStream Ġ= ĠG ZIP OutputStream ( compressed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgzip OutputStream . write ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgzip OutputStream . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgzip OutputStream . close () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcompressed . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinf late 3 1 7 ( un compressed : ĠByteArray ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbout Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG ZIP OutputStream ( b out ). use Ġ{ Ġos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . write ( un compressed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġos . finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbout . toByteArray () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdef late 3 1 7 ( data : ĠByteArray ?): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġread Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg is Ġ= ĠG ZIP InputStream ( ByteArray InputStream ( data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read Ġ== Ġgzip Buffer . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" buffer Ġoverflow !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġg is . read ( gzip Buffer , Ġread , Ġgzip Buffer . size Ġ- Ġread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( length Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ+= Ġlength ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" error Ġun z ipping ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdef lated Ġ= ĠByteArray ( read ) ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( gzip Buffer , Ġ 0 , Ġdef lated , Ġ 0 , Ġdef lated . size ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdef lated ĊĠĠĠ Ġ} Ċ Ċ }