/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . bk repo . common . artifact . resolve . file . bk sync Ċ Ċ import Ġcom . tencent . bk repo . common . artifact . api . Artifact File Ċ import Ġcom . tencent . bk repo . common . artifact . resolve . file . Artifact File Factory Ċ import Ġcom . tencent . bk repo . common . artifact . resolve . file . chunk . Chunk ed File OutputStream Ċ import Ġcom . tencent . bk repo . common . bk sync . Bk Sync Ċ import Ġcom . tencent . bk repo . common . bk sync . Block Channel Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Ċ import Ġjava . nio . channels . Channels Ċ Ċ class ĠB k Sync Artifact File ( ĊĠĠĠ Ġprivate Ġval Ġblock Channel : ĠBlock Channel , ĊĠĠĠ Ġprivate Ġval Ġdelta InputStream : ĠInputStream , ĊĠĠĠ Ġprivate Ġval ĠblockSize : ĠInt Ċ ) Ġ: ĠArtifact File Ġ{ ĊĠĠĠ Ġprivate Ġval Ġchunk ed Artifact File Ġ= ĠArtifact File Factory . build Chunk ed () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ åĪĿå§ĭåĮĸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġinitialized : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġget InputStream (): ĠInputStream Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . getInputStream () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Size (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . getSize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis InMemory (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . isIn Memory () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetFile (): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . getFile () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġflush ToFile (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . flush ToFile () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete () Ġ{ ĊĠĠĠĠĠĠĠ Ġchunk ed Artifact File . delete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Initialized (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinitialized ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Fallback (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . is Fallback () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetFile Md 5 (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . getFile Md 5 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetFile Sha 1 (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . getFile Sha 1 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetFile Sha 2 5 6 (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . getFile Sha 2 5 6 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠisIn Local Disk (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchunk ed Artifact File . isIn Local Disk () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( initialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbk Sync Ġ= ĠB k Sync ( block Size ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠoutputStream ä¸įèĥ½ close , åĽłä¸º close åĲİ ä¼ļ åĪłéĻ¤ ä¸´ æĹ¶ æĸĩä»¶ ãĢĤ è¿ĻéĩĮ ç»Łä¸Ģ éĢļè¿ĩ è¯·æ±Ĥ æĭ ¦ æĪª åĻ¨ è¿Ľè¡Į æ¸ħ çĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= ĠChunk ed File OutputStream ( chunk ed Artifact File ). buffered () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠChannels . new Channel ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbk Sync . merge ( block Channel , Ġdelta InputStream , Ġchannel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbuffered Ġstream æīĢä»¥ éľĢè¦ģ flush ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchunk ed Artifact File . finish () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchunk ed Artifact File . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinitialized Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ