package Ġtech . summer ly . stream cache . cache Ċ Ċ import Ġtech . summer ly . stream cache . Cache Global Setting Ċ import Ġtech . summer ly . stream cache . strategy . Cache Strategy Ċ import Ġtech . summer ly . stream cache . utils . Logger Level Ċ import Ġtech . summer ly . stream cache . utils . log Ċ import Ġjava . io . File Ċ import Ġjava . io . Random Access File Ċ Ċ /** Ċ Ġ* Ġauthor Ġ: ĠYang Bin Ċ Ġ* Ċ Ġ* Ġprovide Ġmethod Ġto Ġwrite Ġand Ġread Ġfile Ġbytes Ċ Ġ* Ċ Ġ* Ġ@ param Ġfilename Ġthe Ġname Ġof Ġcache Ġfile Ċ Ġ* Ġ@ param Ġcache Strategy Ġthe Ġstrategy Ġwhen Ġfile Ġis Ġcached Ċ Ġ*/ Ċ internal Ġclass ĠFile Cache ( ĊĠĠĠĠĠĠĠ Ġfilename : ĠString , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcache Strategy : ĠCache Strategy Ċ ) Ġ: ĠCache () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSU FF IX Ġ= Ġ". download " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġcached File : ĠFile ĊĊĠĠĠ Ġprivate Ġval Ġdata : ĠRandom Access File ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( Cache Global Setting . getCache Dir (), Ġfilename ) ĊĠĠĠĠĠĠĠ Ġval Ġmode : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached File Ġ= Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ġ{ Ġ" file Ġhas Ġbeen Ġcached Ġ: Ġ${ cached File . path }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= Ġ" r " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached File Ġ= ĠFile ( Cache Global Setting . getCache Dir (), Ġfilename Ġ+ ĠSU FF IX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cached File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached File . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ġ{ Ġ" create Ġnew Ġfile Ġ: Ġ${ cached File . path }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= Ġ" rw " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog Ġ{ Ġ" cached Ġfiled Ġ${ cached File . name } Ġsize Ġ= Ġ${ cached File . length () Ġ/ Ġ 1 0 2 4 }" Ġ} ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠRandom Access File ( cached File , Ġmode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġavailable : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata . length () ĊĊĠĠĠ Ġoverride Ġval Ġis Complete : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( cached File . exists () Ġ&& Ġ! cached File . path . endsWith ( SUFFIX )) ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġread ( position : ĠLong , ĠbyteArray : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . seek ( position ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdata . read ( byteArray , Ġoff , Ġlen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġwrite ( byteArray : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Complete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata . seek ( available ) ĊĠĠĠĠĠĠĠ Ġdata . write ( byteArray , Ġoff , Ġlen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlet Ġcache Ġmakes Ġit Ġcomplete ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcomplete () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( cached File . path . remove Suffix ( SUFFIX )) ĊĠĠĠĠĠĠĠ Ġif Ġ( cached File . rename To ( file )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Strategy . on File Cached ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcached File Ġ= Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( Logger Level . ERROR ) Ġ{ Ġ" close Ġfile Ġ${ cached File . path } Ġfailed " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }