package Ġcom . f eli pec sl . kn es Ċ Ċ /** ĠTrans lated / Adapt ed Ġfrom Ġjava . io . ByteArray InputStream Ġ*/ Ċ open Ġclass ĠByteArrayInputStream Ċ /** Ċ Ġ* ĠCreates Ġa Ġ` ByteArray InputStream ` Ċ Ġ* Ġso Ġthat Ġit Ġ Ġuses Ġ` buf ` Ġas Ġits Ċ Ġ* Ġbuffer Ġarray . Ċ Ġ* ĠThe Ġbuffer Ġarray Ġis Ġnot Ġcopied . Ċ Ġ* ĠThe Ġinitial Ġvalue Ġof Ġ` pos ` Ċ Ġ* Ġis Ġ` 0 ` Ġand Ġthe Ġinitial Ġvalue Ċ Ġ* Ġof Ġ Ġ` count ` Ġis Ġthe Ġlength Ġof Ċ Ġ* Ġ` buf `. Ċ Ġ* Ċ Ġ* Ġ@ param ĠĠ Ġbuf ĠĠ Ġthe Ġinput Ġbuffer . Ċ Ġ*/ ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn Ġarray Ġof Ġbytes Ġthat Ġwas Ġprovided ĊĠĠĠĠ Ġ* Ġby Ġthe Ġcreator Ġof Ġthe Ġstream . ĠElements Ġ` buf [ 0 ]` ĊĠĠĠĠ Ġ* Ġthrough Ġ` buf [ count - 1 ]` Ġare Ġthe ĊĠĠĠĠ Ġ* Ġonly Ġbytes Ġthat Ġcan Ġever Ġbe Ġread Ġfrom Ġthe ĊĠĠĠĠ Ġ* Ġstream ; Ġ Ġelement Ġ` buf [ pos ]` Ġis ĊĠĠĠĠ Ġ* Ġthe Ġnext Ġbyte Ġto Ġbe Ġread . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġbuf : ĠByteArray ) Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġindex Ġof Ġthe Ġnext Ġcharacter Ġto Ġread Ġfrom Ġthe Ġinput Ġstream Ġbuffer . ĊĠĠ Ġ* ĠThis Ġvalue Ġshould Ġalways Ġbe Ġnon negative ĊĠĠ Ġ* Ġand Ġnot Ġlarger Ġthan Ġthe Ġvalue Ġof Ġ` count `. ĊĠĠ Ġ* ĠThe Ġnext Ġbyte Ġto Ġbe Ġread Ġfrom Ġthe Ġinput Ġstream Ġbuffer ĊĠĠ Ġ* Ġwill Ġbe Ġ` buf [ pos ] `. ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġpos : ĠInt Ġ= Ġ 0 ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġcurrently Ġmarked Ġposition Ġin Ġthe Ġstream . ĊĠĠ Ġ* ĠByteArrayInputStream Ġobjects Ġare Ġmarked Ġat Ġposition Ġzero Ġby ĊĠĠ Ġ* Ġdefault Ġwhen Ġconstructed . Ġ ĠThey Ġmay Ġbe Ġmarked Ġat Ġanother ĊĠĠ Ġ* Ġposition Ġwithin Ġthe Ġbuffer Ġby Ġthe Ġ` mark ()` Ġmethod . ĊĠĠ Ġ* ĠThe Ġcurrent Ġbuffer Ġposition Ġis Ġset Ġto Ġthis Ġpoint Ġby Ġthe ĊĠĠ Ġ* Ġ` reset ()` Ġmethod . ĊĠĠ Ġ* ĊĠĠ Ġ* ĊĠĠ Ġ* ĠIf Ġno Ġmark Ġhas Ġbeen Ġset , Ġthen Ġthe Ġvalue Ġof Ġmark Ġis Ġthe Ġoffset ĊĠĠ Ġ* Ġpassed Ġto Ġthe Ġconstructor Ġ( or Ġ 0 Ġif Ġthe Ġoffset Ġwas Ġnot Ġsupplied ). ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġmark Ġ= Ġ 0 ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġindex Ġone Ġgreater Ġthan Ġthe Ġlast Ġvalid Ġcharacter Ġin Ġthe Ġinput ĊĠĠ Ġ* Ġstream Ġbuffer . ĊĠĠ Ġ* ĠThis Ġvalue Ġshould Ġalways Ġbe Ġnon negative ĊĠĠ Ġ* Ġand Ġnot Ġlarger Ġthan Ġthe Ġlength Ġof Ġ` buf `. ĊĠĠ Ġ* ĠIt Ġ Ġis Ġone Ġgreater Ġthan Ġthe Ġposition Ġof ĊĠĠ Ġ* Ġthe Ġlast Ġbyte Ġwithin Ġ` buf ` Ġthat ĊĠĠ Ġ* Ġcan Ġever Ġbe Ġread Ġ Ġfrom Ġthe Ġinput Ġstream Ġbuffer . ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġvar Ġcount : ĠInt Ġ= Ġ 0 ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġthis . pos Ġ= Ġ 0 ĊĠĠĠ Ġthis . count Ġ= Ġbuf . size ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReads Ġthe Ġnext Ġbyte Ġof Ġdata Ġfrom Ġthis Ġinput Ġstream . ĠThe Ġvalue ĊĠĠ Ġ* Ġbyte Ġis Ġreturned Ġas Ġan Ġ` int ` Ġin Ġthe Ġrange ĊĠĠ Ġ* Ġ` 0 ` Ġto Ġ` 2 5 5 `. ĠIf Ġno Ġbyte Ġis Ġavailable ĊĠĠ Ġ* Ġbecause Ġthe Ġend Ġof Ġthe Ġstream Ġhas Ġbeen Ġreached , Ġthe Ġvalue ĊĠĠ Ġ* Ġ`- 1 ` Ġis Ġreturned . ĊĠĠ Ġ* ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThis Ġ` read ` Ġmethod ĊĠĠ Ġ* Ġcannot Ġblock . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return Ġ Ġthe Ġnext Ġbyte Ġof Ġdata , Ġor Ġ`- 1 ` Ġif Ġthe Ġend Ġof Ġthe ĊĠĠ Ġ* Ġstream Ġhas Ġbeen Ġreached . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġread (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( pos Ġ< Ġcount ) Ġbuf [ pos ++ ]. toInt () Ġand Ġ 0 xff Ġelse Ġ- 1 ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReads Ġup Ġto Ġ` len ` Ġbytes Ġof Ġdata Ġinto Ġan Ġarray Ġof Ġbytes ĊĠĠ Ġ* Ġfrom Ġthis Ġinput Ġstream . ĊĠĠ Ġ* ĠIf Ġ` pos ` Ġequals Ġ` count `, ĊĠĠ Ġ* Ġthen Ġ`- 1 ` Ġis Ġreturned Ġto Ġindicate ĊĠĠ Ġ* Ġend Ġof Ġfile . ĠOtherwise , Ġthe Ġ Ġnumber Ġ` k ` ĊĠĠ Ġ* Ġof Ġbytes Ġread Ġis Ġequal Ġto Ġthe Ġsmaller Ġof ĊĠĠ Ġ* Ġ` len ` Ġand Ġ` count - pos `. ĊĠĠ Ġ* ĠIf Ġ` k ` Ġis Ġpositive , Ġthen Ġbytes ĊĠĠ Ġ* Ġ` buf [ pos ]` Ġthrough Ġ` buf [ pos + k - 1 ]` ĊĠĠ Ġ* Ġare Ġcopied Ġinto Ġ` b [ off ]` Ġ Ġthrough ĊĠĠ Ġ* Ġ` b [ off + k - 1 ]` Ġin Ġthe Ġmanner Ġperformed ĊĠĠ Ġ* Ġby Ġ` System . arraycopy `. ĠThe ĊĠĠ Ġ* Ġvalue Ġ` k ` Ġis Ġadded Ġinto Ġ` pos ` ĊĠĠ Ġ* Ġand Ġ` k ` Ġis Ġreturned . ĊĠĠ Ġ* ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThis Ġ` read ` Ġmethod Ġcannot Ġblock . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param ĠĠ Ġb ĠĠĠĠ Ġthe Ġbuffer Ġinto Ġwhich Ġthe Ġdata Ġis Ġread . ĊĠĠ Ġ* Ġ@ param ĠĠ Ġoff ĠĠ Ġthe Ġstart Ġoffset Ġin Ġthe Ġdestination Ġarray Ġ` b ` ĊĠĠ Ġ* Ġ@ param ĠĠ Ġlen ĠĠ Ġthe Ġmaximum Ġnumber Ġof Ġbytes Ġread . ĊĠĠ Ġ* Ġ@ return Ġ Ġthe Ġtotal Ġnumber Ġof Ġbytes Ġread Ġinto Ġthe Ġbuffer , Ġor ĊĠĠ Ġ* Ġ`- 1 ` Ġif Ġthere Ġis Ġno Ġmore Ġdata Ġbecause Ġthe Ġend Ġof ĊĠĠ Ġ* Ġthe Ġstream Ġhas Ġbeen Ġreached . ĊĠĠ Ġ* Ġ@ exception Ġ ĠNullPointerException ĠIf Ġ` b ` Ġis Ġ` null `. ĊĠĠ Ġ* Ġ@ exception Ġ ĠIndex OutOfBoundsException ĠIf Ġ` off ` Ġis Ġnegative , ĊĠĠ Ġ* Ġ` len ` Ġis Ġnegative , Ġor Ġ` len ` Ġis Ġgreater Ġthan ĊĠĠ Ġ* Ġ` b . length Ġ- Ġoff ` ĊĠĠ Ġ*/ ĊĠ Ġfun Ġread ( b : ĠByteArray , Ġoff : ĠInt , Ġlen : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġmut Len Ġ= Ġlen ĊĠĠĠ Ġif Ġ( off Ġ< Ġ 0 Ġ|| Ġmut Len Ġ< Ġ 0 Ġ|| Ġmut Len Ġ> Ġb . size Ġ- Ġoff ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIndex OutOfBoundsException () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( pos Ġ>= Ġcount ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġavail Ġ= Ġcount Ġ- Ġpos ĊĠĠĠ Ġif Ġ( mut Len Ġ> Ġavail ) Ġ{ ĊĠĠĠĠĠ Ġmut Len Ġ= Ġavail ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( mut Len Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġarray Copy ( buf , Ġpos , Ġb , Ġoff , Ġmut Len ) ĊĠĠĠ Ġpos Ġ+= Ġmut Len ĊĠĠĠ Ġreturn Ġmut Len ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġarray Copy ( src : ĠByteArray , Ġsrc Pos : ĠInt , Ġdst : ĠByteArray , Ġdst Pos : ĠInt , Ġlength : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( src Pos Ġ< Ġ 0 Ġ|| Ġdst Pos Ġ< Ġ 0 Ġ|| Ġlength Ġ< Ġ 0 Ġ|| Ġsrc Pos Ġ> Ġsrc . size Ġ- Ġlength Ġ|| Ġdst Pos Ġ> Ġdst . size Ġ- Ġlength ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" src . length =" Ġ+ Ġsrc . size Ġ+ Ġ" Ġsrc Pos =" Ġ+ Ġsrc Pos Ġ+ ĊĠĠĠĠĠĠĠĠĠ Ġ" Ġdst . length =" Ġ+ Ġdst . size Ġ+ Ġ" Ġdst Pos =" Ġ+ Ġdst Pos Ġ+ Ġ" Ġlength =" Ġ+ Ġlength ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠCopy Ġbyte Ġby Ġbyte Ġfor Ġshorter Ġarrays . ĊĠĠĠ Ġif Ġ( src Ġ=== Ġdst Ġ&& Ġsrc Pos Ġ< Ġdst Pos Ġ&& Ġdst Pos Ġ< Ġsrc Pos Ġ+ Ġlength ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠCopy Ġbackward Ġ( to Ġavoid Ġover writing Ġelements Ġbefore ĊĠĠĠĠĠ Ġ// Ġthey Ġare Ġcopied Ġin Ġcase Ġof Ġan Ġoverlap Ġon Ġthe Ġsame Ġarray .) ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlength Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdst [ dst Pos Ġ+ Ġi ] Ġ= Ġsrc [ src Pos Ġ+ Ġi ] ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// ĠCopy Ġforward . ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlength ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdst [ dst Pos Ġ+ Ġi ] Ġ= Ġsrc [ src Pos Ġ+ Ġi ] ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġthe Ġnumber Ġof Ġremaining Ġbytes Ġthat Ġcan Ġbe Ġread Ġ( or Ġskipped Ġover ) ĊĠĠ Ġ* Ġfrom Ġthis Ġinput Ġstream . ĊĠĠ Ġ* ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThe Ġvalue Ġreturned Ġis Ġ` count & nbsp ;- Ġpos `, ĊĠĠ Ġ* Ġwhich Ġis Ġthe Ġnumber Ġof Ġbytes Ġremaining Ġto Ġbe Ġread Ġfrom Ġthe Ġinput Ġbuffer . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return Ġ Ġthe Ġnumber Ġof Ġremaining Ġbytes Ġthat Ġcan Ġbe Ġread Ġ( or Ġskipped ĊĠĠ Ġ* Ġover ) Ġfrom Ġthis Ġinput Ġstream Ġwithout Ġblocking . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġavailable (): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġcount Ġ- Ġpos ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRe sets Ġthe Ġbuffer Ġto Ġthe Ġmarked Ġposition . Ġ ĠThe Ġmarked Ġposition ĊĠĠ Ġ* Ġis Ġ 0 Ġunless Ġanother Ġposition Ġwas Ġmarked Ġor Ġan Ġoffset Ġwas Ġspecified ĊĠĠ Ġ* Ġin Ġthe Ġconstructor . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġreset () Ġ{ ĊĠĠĠ Ġpos Ġ= Ġmark ĊĠ Ġ} ĊĊĠ Ġfun Ġread ( b : ĠByteArray ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġread ( b , Ġ 0 , Ġb . size ) ĊĠ Ġ} Ċ } Ċ