package Ġnet . the luck y coder . k omp ress . parallel Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . OutputStream Ċ Ċ /** Ċ Ġ* ĠS cat ter Gather Backing Store Ġthat Ġis Ġbacked Ġby Ġa Ġfile . Ċ Ġ*/ Ċ public Ġclass ĠFile Based Scatter Gather Backing Store ( private Ġval Ġtarget : ĠFile ) Ġ: ĠS cat ter Gather Backing Store Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġos : ĠOutputStream Ġ= Ġtarget . output Stream () ĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġval ĠinputStream : ĠInputStream Ġ= Ġtarget . inputStream () ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġclose For Writing () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġos . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġwrite Out ( data : ĠByteArray , Ġoffset : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġos . write ( data , Ġoffset , Ġlength ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose For Writing () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target . exists () Ġ&& Ġ! target . delete ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . delete On Exit () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ