package Ġio . da h gan . stream Ċ Ċ /** Ċ Ġ* ĠDe codes Ġa ĠUTF - 3 2 Ġ( LE Ġor ĠBE ) Ġbyte Ġarray Ġto Ġunicode Ġcharacters . Ċ Ġ*/ Ċ class ĠUTF 3 2 Decoder Ġprivate Ġconstructor ( val Ġcombine : Ġ( Int , ĠInt , ĠInt , ĠInt ) Ġ-> ĠInt ) Ġ: ĠDecoder Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDe codes Ġa ĠUTF - 3 2 BE Ġbyte Ġarray Ġto Ġunicode Ġcharacters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠCombine Ġfunction Ġcombin es Ġtwo Ġbytes Ġof Ġa ĠUTF - 3 2 BE Ġcharacter Ġand Ġreturns Ġthe Ġresult . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbe (): ĠUTF 3 2 Decoder Ġ= ĠUTF 3 2 Decoder Ġ{ Ġfirst , Ġsecond , Ġthird , Ġfourth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfourth Ġ+ Ġ 2 5 6 Ġ* Ġ( third Ġ+ Ġ 2 5 6 Ġ* Ġ( second Ġ+ Ġ 2 5 6 Ġ* Ġfirst )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDe codes Ġa ĠUTF - 3 2 LE Ġbyte Ġarray Ġto Ġunicode Ġcharacters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠCombine Ġfunction Ġcombin es Ġtwo Ġbytes Ġof Ġa ĠUTF - 3 2 LE Ġcharacter Ġand Ġreturns Ġthe Ġresult . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġle (): ĠUTF 3 2 Decoder Ġ= ĠUTF 3 2 Decoder Ġ{ Ġfirst , Ġsecond , Ġthird , Ġfourth Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ+ Ġ 2 5 6 Ġ* Ġ( second Ġ+ Ġ 2 5 6 Ġ* Ġ( third Ġ+ Ġ 2 5 6 Ġ* Ġfourth )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠDecoder # decode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdecode ( bytes : ĠByteArray , Ġoffset : ĠInt ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 4 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 3 2 Ġinput Ġcontains Ġinvalid Ġnumber Ġof Ġbytes ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġbytes [ offset ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġbytes [ offset Ġ+ Ġ 1 ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġthird Ġ= Ġbytes [ offset Ġ+ Ġ 2 ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġfourth Ġ= Ġbytes [ offset Ġ+ Ġ 3 ]. to Unsigned Int () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUni Char ( offset Ġ+ Ġ 4 , Ġcombine ( first , Ġsecond , Ġthird , Ġfourth )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDe codes Ġa ĠUTF - 1 6 Ġ( LE Ġor ĠBE ) Ġbyte Ġarray Ġto Ġunicode Ġcharacters . Ċ Ġ*/ Ċ class ĠUTF 1 6 Decoder Ġprivate Ġconstructor ( val Ġcombine : Ġ( Int , ĠInt ) Ġ-> ĠInt ) Ġ: ĠDecoder Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDe codes Ġa ĠUTF - 1 6 BE Ġbyte Ġarray Ġto Ġunicode Ġcharacters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠCombine Ġfunction Ġcombin es Ġtwo Ġbytes Ġof Ġa ĠUTF - 1 6 BE Ġcharacter Ġand Ġreturns Ġthe Ġresult . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbe (): ĠUTF 1 6 Decoder Ġ= ĠUTF 1 6 Decoder Ġ{ Ġfirst , Ġsecond Ġ-> Ġsecond Ġ+ Ġfirst Ġ* Ġ 2 5 6 Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDe codes Ġa ĠUTF - 1 6 LE Ġbyte Ġarray Ġto Ġunicode Ġcharacters . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠCombine Ġfunction Ġcombin es Ġtwo Ġbytes Ġof Ġa ĠUTF - 1 6 LE Ġcharacter Ġand Ġreturns Ġthe Ġresult . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġle (): ĠUTF 1 6 Decoder Ġ= ĠUTF 1 6 Decoder Ġ{ Ġfirst , Ġsecond Ġ-> Ġfirst Ġ+ Ġsecond Ġ* Ġ 2 5 6 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCop ied Ġfrom Ġthe Ġunicode ĠFAQ s . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġsur rogate Offset Ġ= Ġ 0 x 1 0 0 0 0 Ġ- Ġ( 0 xD 8 0 0 Ġ* Ġ 1 0 2 4 ) Ġ- Ġ 0 xDC 0 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠDecoder # decode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdecode ( bytes : ĠByteArray , Ġoffset : ĠInt ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhead Ġ= Ġundo ( bytes , Ġoffset ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead . code Ġin Ġ 0 xD 8 0 0 .. 0 x DB FF Ġ-> Ġcombine Lead ( head , Ġbytes , Ġhead . offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhead . code Ġin Ġ 0 xDC 0 0 .. 0 xD FFF Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 1 6 Ġcontains Ġtrail Ġsur rogate Ġwithout Ġlead Ġsur rogate ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġhead ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe codes Ġa ĠUTF - 1 6 Ġ( LE Ġor ĠBE ) Ġbyte Ġarray Ġto Ġa Ġunicode Ġchar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġundo ( bytes : ĠByteArray , Ġoffset : ĠInt ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 2 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 1 6 Ġinput Ġcontains Ġodd Ġnumber Ġof Ġbytes ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġbytes [ offset ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġbytes [ offset Ġ+ Ġ 1 ]. to Unsigned Int () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUni Char ( offset Ġ+ Ġ 2 , Ġcombine ( first , Ġsecond )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġtwo ĠUTF - 1 6 Ġsur rog ates Ġinto Ġa Ġsingle Ġunicode Ġcharacter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcombine Sur rog ates ( lead : ĠInt , Ġtrail : ĠInt ): ĠInt Ġ= Ġlead Ġ* Ġ 1 0 2 4 Ġ+ Ġtrail Ġ+ Ġsur rogate Offset ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġthe Ġlead Ġsur rogate Ġwith Ġthe Ġhead Ġof Ġthe Ġrest Ġof Ġthe Ġinput Ġcharacters , ĊĠĠĠĠ Ġ* Ġassumed Ġto Ġbe Ġa Ġtrail Ġsur rogate , Ġand Ġcontinues Ġcombining Ġsur rogate Ġpairs . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcombine Lead ( lead : ĠUni Char , Ġbytes : ĠByteArray , Ġoffset : ĠInt ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 2 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 1 6 Ġcontains Ġlead Ġsur rogate Ġas Ġfinal Ġcharacter ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtail Ġ= Ġundo ( bytes , Ġoffset ) ĊĠĠĠĠĠĠĠ Ġval Ġtail Char Ġ= Ġtail . code ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tail . code Ġin Ġ 0 xDC 0 0 .. 0 xD FFF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUni Char ( tail . offset , Ġcombine Sur rog ates ( lead . code , Ġtail Char )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 1 6 Ġcontains Ġlead Ġsur rogate Ġwithout Ġtrail Ġsur rogate ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠDe codes Ġa ĠUTF - 8 Ġbyte Ġarray Ġto Ġunicode Ġcharacters . Ċ Ġ*/ Ċ class ĠUTF 8 Decoder Ġ: ĠDecoder Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ see ĠDecoder # decode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdecode ( bytes : ĠByteArray , Ġoffset : ĠInt ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 1 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġinput Ġcontains Ġinvalid Ġnumber Ġof Ġbytes ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġbytes [ offset ]. to Unsigned Int () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ< Ġ 0 x 8 0 Ġ-> ĠUni Char ( offset Ġ+ Ġ 1 , Ġfirst ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ< Ġ 0 xC 0 Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġinput Ġcontains Ġinvalid Ġfirst Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ< Ġ 0 xE 0 Ġ-> Ġdecode Two UTF 8 ( first , Ġoffset Ġ+ Ġ 1 , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ< Ġ 0 xF 0 Ġ-> Ġdecode Three UTF 8 ( first , Ġoffset Ġ+ Ġ 1 , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ< Ġ 0 xF 8 Ġ-> Ġdecode Four UTF 8 ( first , Ġoffset Ġ+ Ġ 1 , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġinput Ġcontains Ġinvalid Ġfirst Ġbyte ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe codes Ġa Ġtwo - byte ĠUTF - 8 Ġcharacter , ĊĠĠĠĠ Ġ* Ġwhere Ġthe Ġfirst Ġbyte Ġis Ġalready Ġavailable Ġand Ġthe Ġsecond Ġis Ġthe Ġhead Ġof ĊĠĠĠĠ Ġ* Ġthe Ġbytes , Ġand Ġthen Ġcontinues Ġto Ġundo Ġthe ĠUTF - 8 Ġencoding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdecode Two UTF 8 ( first : ĠInt , Ġoffset : ĠInt , Ġbytes : ĠByteArray ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 1 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġdouble Ġbyte Ġchar Ġis Ġmissing Ġsecond Ġbyte Ġat Ġeof ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġbytes [ offset ]. to Unsigned Int () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Ġ< Ġ 0 x 8 0 Ġ|| Ġ 0 xB F Ġ< Ġsecond Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġtriple Ġbyte Ġchar Ġhas Ġinvalid Ġsecond Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUni Char ( offset Ġ+ Ġ 1 , Ġcombine Two UTF 8 ( first , Ġsecond )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġthe Ġfirst Ġand Ġsecond Ġbytes Ġof Ġa Ġtwo - byte ĠUTF - 8 Ġchar Ġinto Ġa Ġsingle Ġunicode Ġchar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcombine Two UTF 8 ( first : ĠInt , Ġsecond : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( first Ġ- Ġ 0 xC 0 ) Ġ* Ġ 6 4 Ġ+ Ġ( second Ġ- Ġ 0 x 8 0 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe codes Ġa Ġthree - byte ĠUTF - 8 Ġcharacter , ĊĠĠĠĠ Ġ* Ġwhere Ġthe Ġfirst Ġbyte Ġis Ġalready Ġavailable Ġand Ġthe Ġsecond Ġand Ġthird Ġare Ġthe ĊĠĠĠĠ Ġ* Ġhead Ġof Ġthe Ġbytes , Ġand Ġthen Ġcontinues Ġto Ġundo Ġthe ĠUTF - 8 Ġencoding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdecode Three UTF 8 ( first : ĠInt , Ġoffset : ĠInt , Ġbytes : ĠByteArray ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 2 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġtriple Ġbyte Ġchar Ġis Ġmissing Ġbytes Ġat Ġeof ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġbytes [ offset ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġthird Ġ= Ġbytes [ offset Ġ+ Ġ 1 ]. to Unsigned Int () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Ġ< Ġ 0 x 8 0 Ġ|| Ġ 0 xB F Ġ< Ġsecond Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġtriple Ġbyte Ġchar Ġhas Ġinvalid Ġsecond Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthird Ġ< Ġ 0 x 8 0 Ġ|| Ġ 0 xB F Ġ< Ġthird Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġtriple Ġbyte Ġchar Ġhas Ġinvalid Ġthird Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUni Char ( offset Ġ+ Ġ 2 , Ġcombine Three UTF 8 ( first , Ġsecond , Ġthird )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġthe Ġfirst , Ġsecond Ġand Ġthird Ġbytes Ġof Ġa Ġthree - byte ĠUTF - 8 Ġchar Ġinto Ġa Ġsingle Ġunicode Ġchar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcombine Three UTF 8 ( first : ĠInt , Ġsecond : ĠInt , Ġthird : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( first Ġ- Ġ 0 xE 0 ) Ġ* Ġ 4 0 9 6 Ġ+ Ġ( second Ġ- Ġ 0 x 8 0 ) Ġ* Ġ 6 4 Ġ+ Ġ( third Ġ- Ġ 0 x 8 0 ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe codes Ġa Ġfour - byte ĠUTF - 8 Ġcharacter , Ġwhere Ġthe Ġfirst Ġbyte Ġis Ġalready Ġavailable Ġand Ġthe Ġsecond , Ġthird Ġand Ġfourth ĊĠĠĠĠ Ġ* Ġare Ġthe Ġhead Ġof Ġthe Ġbytes , Ġand Ġthen Ġcontinues Ġto Ġundo Ġthe ĠUTF - 8 Ġencoding . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdecode Four UTF 8 ( first : ĠInt , Ġoffset : ĠInt , Ġbytes : ĠByteArray ): ĠUni Char Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has F ew er Than ( offset , Ġ 3 , Ġbytes )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġquad Ġbyte Ġchar Ġis Ġmissing Ġbytes Ġat Ġeof ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġbytes [ offset ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġthird Ġ= Ġbytes [ offset Ġ+ Ġ 1 ]. to Unsigned Int () ĊĠĠĠĠĠĠĠ Ġval Ġfourth Ġ= Ġbytes [ offset Ġ+ Ġ 2 ]. to Unsigned Int () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Ġ< Ġ 0 x 8 0 Ġ|| Ġ 0 xB F Ġ< Ġsecond Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġquad Ġbyte Ġchar Ġhas Ġinvalid Ġsecond Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthird Ġ< Ġ 0 x 8 0 Ġ|| Ġ 0 xB F Ġ< Ġthird Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġquad Ġbyte Ġchar Ġhas Ġinvalid Ġthird Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfourth Ġ< Ġ 0 x 8 0 Ġ|| Ġ 0 xB F Ġ< Ġfourth Ġ-> Ġthrow ĠIllegalArgumentException (" UTF - 8 Ġquad Ġbyte Ġchar Ġhas Ġinvalid Ġfourth Ġbyte ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠUni Char ( offset Ġ+ Ġ 3 , Ġcombine Four UTF 8 ( first , Ġsecond , Ġthird , Ġfourth )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCombin es Ġthe Ġfirst , Ġsecond , Ġthird Ġand Ġfourth Ġbytes Ġof Ġa Ġfour - byte ĠUTF - 8 Ġchar Ġinto Ġa Ġsingle Ġunicode Ġchar . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcombine Four UTF 8 ( first : ĠInt , Ġsecond : ĠInt , Ġthird : ĠInt , Ġfourth : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( first Ġ- Ġ 0 xF 0 ) Ġ* Ġ 2 6 2 1 4 4 Ġ+ Ġ( second Ġ- Ġ 0 x 8 0 ) Ġ* Ġ 4 0 9 6 Ġ+ Ġ( third Ġ- Ġ 0 x 8 0 ) Ġ* Ġ 6 4 Ġ+ Ġ( four th Ġ- Ġ 0 x 8 0 ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠChecks Ġwhether Ġthere Ġare Ġfewer Ġthan Ġn Ġbytes Ġleft Ġto Ġread . Ċ Ġ*/ Ċ private Ġfun Ġhas F ew er Than ( offset : ĠInt , Ġn : ĠInt , Ġbytes : ĠByteArray ) Ġ= Ġbytes . size Ġ- Ġoffset Ġ< Ġn Ċ Ċ /** Ċ Ġ* ĠCop ies Ġthe Ġbyte Ġin Ġan ĠInt Ġand Ġreturns Ġthe Ġint Ġrepresentation Ġof Ġit . Ċ Ġ*/ Ċ private Ġfun ĠByte . to Unsigned Int (): ĠInt Ġ= Ġthis . toInt () Ġand Ġ 0 xFF Ċ