/* Ċ Ġ* Ġ@ (# ) ĠResource Descriptor . kt Ċ Ġ* Ċ Ġ* Ġresource - loader Ġ ĠResource Ġloading Ġmechanism Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠPeter ĠWall Ċ Ġ* Ċ Ġ* Ġ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 Ġio . k json . resource Ċ Ċ import Ġjava . io . InputStream Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . time . Instant Ċ Ċ import Ġnet . p wall . pipeline . codec . Dynamic Reader Ċ Ċ /** Ċ Ġ* ĠA ĠResource ĠDescriptor . Ġ ĠThis Ġcontains Ġall Ġthe Ġinformation Ġknown Ġabout Ġthe Ġresource , Ġto Ġallow Ġthe Ġloading Ġfunction Ġto Ċ Ġ* Ġread Ġthe Ġdata Ġand Ġapply Ġthe Ġcorrect Ġcharset Ġand Ġdata Ġconversion Ġrequired . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ ĠPeter ĠWall Ċ Ġ*/ Ċ data Ġclass ĠResource Descriptor ( ĊĠĠĠ Ġval ĠinputStream : ĠInputStream , ĊĠĠĠ Ġval Ġcharset Name : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġsize : ĠLong ? Ġ= Ġnull , ĊĠĠĠ Ġval Ġtime : ĠInstant ? Ġ= Ġnull , ĊĠĠĠ Ġval ĠmimeType : ĠString ? Ġ= Ġnull Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġa Ġ` Reader ` Ġto Ġread Ġthe Ġresource . Ġ ĠIf Ġthe Ġresource Ġspecifies Ġan Ġexplicit Ġcharset Ġname , Ġthe Ġfunction Ġwill ĊĠĠĠĠ Ġ* Ġattempt Ġto Ġlocate Ġa Ġcharset Ġwith Ġthat Ġname , Ġand Ġif Ġit Ġis Ġsuccessful Ġthat Ġcharset Ġwill Ġbe Ġused . Ġ ĠIf Ġthe Ġresource ĊĠĠĠĠ Ġ* Ġdoes Ġnot Ġspecify Ġan Ġexplicit Ġcharset Ġname Ġand Ġthe Ġ` default Charset ` Ġparameter Ġis Ġprovided , Ġthat Ġwill Ġbe Ġused . Ġ ĠIf ĊĠĠĠĠ Ġ* Ġneither Ġis Ġprovided , Ġthe Ġ[ Dynamic Reader ] Ġwill Ġchoose Ġthe Ġcharset Ġbased Ġon Ġthe Ġcontent Ġof Ġthe Ġdata Ġ( in Ġmost Ġcases ĊĠĠĠĠ Ġ* Ġthis Ġwill Ġbe Ġthe Ġbest Ġoption ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠĠ Ġdefault Charset Ġ Ġthe Ġcharset Ġto Ġuse Ġif Ġthe Ġresource Ġdoes Ġnot Ġspecify Ġan Ġexplicit Ġcharset ĊĠĠĠĠ Ġ* Ġ@ return ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa Ġ[ Dynamic Reader ] Ġ( extends Ġ` Reader `) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Reader ( default Charset : ĠCharset ? Ġ= Ġnull ): ĠDynamic Reader Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcs Ġ= Ġcharset Name ?. let Ġ{ Ġtry Ġ{ ĠCharset . forName ( it ) Ġ} Ġcatch Ġ(_ : ĠException ) Ġ{ Ġnull Ġ} Ġ} Ġ?: Ġdefault Charset ĊĠĠĠĠĠĠĠ Ġreturn ĠDynamic Reader ( inputStream , Ġcs ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ