package Ġgg . r sm od . util . io Ċ Ċ import Ġio . netty . buffer . Byte Buf Ċ Ċ /** Ċ Ġ* Ġ@ author ĠTom Ġ< rsp sm ods @ gmail . com > Ċ Ġ*/ Ċ object ĠBuffer Utils Ġ{ ĊĠĠĠ Ġfun ĠByte Buf . readString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Readable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġreader Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( read Byte (). toInt () Ġ!= Ġ 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġreader Index () Ġ- Ġstart ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader Index ( start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Bytes ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( data , Ġ 0 , Ġsize Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠByte Buf . read J age x String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Readable Ġ&& Ġread Byte (). toInt () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġreader Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( read Byte (). toInt () Ġ!= Ġ 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġreader Index () Ġ- Ġstart ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArray ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader Index ( start ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Bytes ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠString ( data , Ġ 0 , Ġsize Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ 3 2 - bit Ġinteger Ġat Ġthe Ġcurrent Ġ{@ code Ġreader Index } ĊĠĠĠĠ Ġ* Ġin ĠL it te Ġendian Ġformat Ġ( DC BA ) ĊĠĠĠĠ Ġ* Ġand Ġincreases Ġthe Ġ{@ code Ġreader Index } Ġby Ġ{@ code Ġ 4 } Ġin Ġthis Ġbuffer . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġif Ġ{@ code Ġthis . readable Bytes } Ġis Ġless Ġthan Ġ{@ code Ġ 4 } ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote | Ġthis Ġmethod Ġnow Ġis Ġn atively Ġimplemented Ġin Ġnet ty Ġand Ġshouldn 't Ġbe Ġneeded ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠ Ġcommented Ġout Ġfor Ġposter ity Ġand Ġto Ġkeep Ġit Ġfrom Ġshowing Ġin Ġcode Ġcompletion ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠByte Buf . read LE Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( readable Bytes () Ġ< Ġ 4 ) Ġthrow ĠIndex OutOfBoundsException (" buffer Ġdoes Ġnot Ġcontain Ġenough Ġbytes Ġto Ġread Ġan Ġint ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 8 ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 1 6 ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 2 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ 3 2 - bit Ġinteger Ġat Ġthe Ġcurrent Ġ{@ code Ġreader Index } ĊĠĠĠĠ Ġ* Ġin ĠIn verse ĠMiddle Ġendian Ġformat Ġ( BAD C ) ĊĠĠĠĠ Ġ* Ġand Ġincreases Ġthe Ġ{@ code Ġreader Index } Ġby Ġ{@ code Ġ 4 } Ġin Ġthis Ġbuffer . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġif Ġ{@ code Ġthis . readable Bytes } Ġis Ġless Ġthan Ġ{@ code Ġ 4 } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠByte Buf . read Inverse Middle Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( readable Bytes () Ġ< Ġ 4 ) Ġthrow ĠIndex OutOfBoundsException (" buffer Ġdoes Ġnot Ġcontain Ġenough Ġbytes Ġto Ġread Ġan Ġint ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 1 6 ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 2 4 ) Ġ+ Ġ( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 8 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġa Ġ 3 2 - bit Ġinteger Ġat Ġthe Ġcurrent Ġ{@ code Ġreader Index } ĊĠĠĠĠ Ġ* Ġin ĠMiddle Ġendian Ġformat Ġ( CD AB ) ĊĠĠĠĠ Ġ* Ġand Ġincreases Ġthe Ġ{@ code Ġreader Index } Ġby Ġ{@ code Ġ 4 } Ġin Ġthis Ġbuffer . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIndex OutOfBoundsException ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠ Ġif Ġ{@ code Ġthis . readable Bytes } Ġis Ġless Ġthan Ġ{@ code Ġ 4 } ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠByte Buf . read Middle Endian Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( readable Bytes () Ġ< Ġ 4 ) Ġthrow ĠIndex OutOfBoundsException (" buffer Ġdoes Ġnot Ġcontain Ġenough Ġbytes Ġto Ġread Ġan Ġint ") ĊĠĠĠĠĠĠĠ Ġreturn Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 8 ) Ġ+ Ġ( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 2 4 ) Ġ+ Ġ(( read Byte (). toInt () Ġand Ġ 0 xFF ) Ġshl Ġ 1 6 ) ĊĠĠĠ Ġ} Ċ Ċ }