// ĠAS M : Ġa Ġvery Ġsmall Ġand Ġfast ĠJava Ġbytecode Ġmanipulation Ġframework Ċ // ĠCopyright Ġ( c ) Ġ 2 0 0 0 - 2 0 1 1 ĠIN RI A , ĠFrance ĠTele com Ċ // ĠAll Ġrights Ġreserved . Ċ // Ċ // ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ // Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ċ // Ġare Ġmet : Ċ // Ġ 1 . ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ċ // ĠĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ // Ġ 2 . ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ċ // ĠĠĠ Ġnotice , Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ċ // ĠĠĠ Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ // Ġ 3 . ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġhold ers Ġnor Ġthe Ġnames Ġof Ġits Ċ // ĠĠĠ Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ċ // ĠĠĠ Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ // Ċ // ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ // ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ // ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE Ċ // ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠCONTRIBUTORS ĠBE Ċ // ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR Ċ // ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF Ċ // ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS Ċ // ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN Ċ // ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) Ċ // ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF Ċ // ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ package Ġorg . object web . asm Ċ Ċ import ĠSystem Ċ Ċ /** Ċ Ġ* ĠA Ġdynamically Ġext ensible Ġvector Ġof Ġbytes . ĠThis Ġclass Ġis Ġroughly Ġequivalent Ġto Ġa ĠData OutputStream Ċ Ġ* Ġon Ġtop Ġof Ġa ĠByteArrayOutputStream , Ġbut Ġis Ġmore Ġefficient . Ċ Ġ* Ċ Ġ* Ġ@ author ĠEric ĠB run et on Ċ Ġ*/ Ċ class ĠByte Vector Ġ{ ĊĠĠĠ Ġ/** ĠThe Ġcontent Ġof Ġthis Ġvector . ĠOnly Ġthe Ġfirst Ġ[. length ] Ġbytes Ġcontain Ġreal Ġdata . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġdata : ĠByteArray ĊĊĠĠĠ Ġ/** ĠThe Ġactual Ġnumber Ġof Ġbytes Ġin Ġthis Ġvector . Ġ Ġ*/ ĊĠĠĠ Ġvar Ġlength Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĠConstructs Ġa Ġnew Ġ[ Byte Vector ] Ġwith Ġa Ġdefault Ġinitial Ġcapacity . Ġ Ġ*/ ĊĠĠĠ Ġconstructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠByteArray ( 6 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Byte Vector ] Ġwith Ġthe Ġgiven Ġinitial Ġcapacity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Capacity Ġthe Ġinitial Ġcapacity Ġof Ġthe Ġbyte Ġvector Ġto Ġbe Ġconstructed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( initial Capacity : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠByteArray ( initial Capacity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConstructs Ġa Ġnew Ġ[ Byte Vector ] Ġfrom Ġthe Ġgiven Ġinitial Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġthe Ġinitial Ġdata Ġof Ġthe Ġnew Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġconstructor ( data : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġdata . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġa Ġbyte Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue Ġa Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput Byte ( byte Value : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 1 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= ĠbyteValue . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġtwo Ġbytes Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue 1 Ġa Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue 2 Ġanother Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput 1 1 ( byte Value 1 : ĠInt , ĠbyteValue 2 : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 2 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= ĠbyteValue 1 . to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= ĠbyteValue 2 . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġa Ġshort Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġshort Value Ġa Ġshort . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput Short ( short Value : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 2 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( short Value Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġshort Value . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġa Ġbyte Ġand Ġa Ġshort Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif ĊĠĠĠĠ Ġ* Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue Ġa Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ param Ġshort Value Ġa Ġshort . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput 1 2 ( byte Value : ĠInt , Ġshort Value : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 3 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= ĠbyteValue . to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( short Value Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġshort Value . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġtwo Ġbytes Ġand Ġa Ġshort Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif ĊĠĠĠĠ Ġ* Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue 1 Ġa Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue 2 Ġanother Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ param Ġshort Value Ġa Ġshort . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput 1 1 2 ( byte Value 1 : ĠInt , ĠbyteValue 2 : ĠInt , Ġshort Value : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 4 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= ĠbyteValue 1 . to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= ĠbyteValue 2 . to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( short Value Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġshort Value . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġan Ġint Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġint Value Ġan Ġint . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput Int ( intValue : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 4 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 2 4 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 1 6 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġint Value . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġone Ġbyte Ġand Ġtwo Ġshort s Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged ĊĠĠĠĠ Ġ* Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteValue Ġa Ġbyte . ĊĠĠĠĠ Ġ* Ġ@ param Ġshort Value 1 Ġa Ġshort . ĊĠĠĠĠ Ġ* Ġ@ param Ġshort Value 2 Ġanother Ġshort . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput 1 2 2 ( byte Value : ĠInt , Ġshort Value 1 : ĠInt , Ġshort Value 2 : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 5 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= ĠbyteValue . to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( short Value 1 Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġshort Value 1 . to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( short Value 2 Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġshort Value 2 . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġa Ġlong Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlong Value Ġa Ġlong . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput Long ( longValue : ĠLong ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 8 Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġvar Ġint Value Ġ= Ġ( longValue Ġ ush r Ġ 3 2 ). toInt () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 2 4 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 1 6 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġint Value . to Byte () ĊĠĠĠĠĠĠĠ Ġint Value Ġ= Ġlong Value . toInt () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 2 4 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 1 6 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( intValue Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġint Value . to Byte () ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġan ĠUTF 8 Ġstring Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif ĊĠĠĠĠ Ġ* Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstring Value Ġa ĠString Ġwhose ĠUTF 8 Ġencoded Ġlength Ġmust Ġbe Ġless Ġthan Ġ 6 5 5 3 6 . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ// ĠD ont Check ( Abbre viation As Word In Name ): Ġcan 't Ġbe Ġrenamed Ġ( for Ġbackward Ġbinary Ġcompatibility ). ĊĠĠĠ Ġfun Ġput UTF 8 ( stringValue : ĠString ?): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchar Length Ġ= Ġstring Value !!. length ĊĠĠĠĠĠĠĠ Ġif Ġ( char Length Ġ> Ġ 6 5 5 3 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF 8 Ġstring Ġtoo Ġlarge ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġif Ġ( current Length Ġ+ Ġ 2 Ġ+ Ġchar Length Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( 2 Ġ+ Ġchar Length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Data Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġ// ĠOptim istic Ġalgorithm : Ġinstead Ġof Ġcomputing Ġthe Ġbyte Ġlength Ġand Ġthen Ġserial izing Ġthe Ġstring ĊĠĠĠĠĠĠĠ Ġ// Ġ( which Ġrequires Ġtwo Ġloops ), Ġwe Ġassume Ġthe Ġbyte Ġlength Ġis Ġequal Ġto Ġchar Ġlength Ġ( which Ġis Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġmost Ġfrequent Ġcase ), Ġand Ġwe Ġstart Ġserial izing Ġthe Ġstring Ġright Ġaway . ĠDuring Ġthe ĊĠĠĠĠĠĠĠ Ġ// Ġserialization , Ġif Ġwe Ġfind Ġthat Ġthis Ġassumption Ġis Ġwrong , Ġwe Ġcontinue Ġwith Ġthe Ġgeneral Ġmethod . ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġ( char Length Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġchar Length . to Byte () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchar Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Value Ġ= Ġstring Value [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Value Ġ>= Ġ'\ u 0 0 0 1 ' Ġ&& Ġchar Value Ġ<= Ġ'\ u 0 0 7 F ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Data [ current Length ++] Ġ= Ġchar Value . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencode Utf 8 ( stringValue , Ġi , Ġ 6 5 5 3 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġan ĠUTF 8 Ġstring Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif ĊĠĠĠĠ Ġ* Ġnecessary . ĠThe Ġstring Ġlength Ġis Ġencoded Ġin Ġtwo Ġbytes Ġbefore Ġthe Ġencoded Ġcharacters , Ġif Ġthere Ġis ĊĠĠĠĠ Ġ* Ġspace Ġfor Ġthat Ġ( i . e . Ġif Ġthis . length Ġ- Ġoffset Ġ- Ġ 2 Ġ& gt ;= Ġ 0 ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstring Value Ġthe ĠString Ġto Ġencode . ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset Ġthe Ġindex Ġof Ġthe Ġfirst Ġcharacter Ġto Ġencode . ĠThe Ġprevious Ġcharacters Ġare Ġsupposed ĊĠĠĠĠ Ġ* Ġto Ġhave Ġalready Ġbeen Ġencoded , Ġusing Ġonly Ġone Ġbyte Ġper Ġcharacter . ĊĠĠĠĠ Ġ* Ġ@ param Ġmax Byte Length Ġthe Ġmaximum Ġbyte Ġlength Ġof Ġthe Ġencoded Ġstring , Ġincluding Ġthe Ġalready ĊĠĠĠĠ Ġ* Ġencoded Ġcharacters . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġencode Utf 8 ( stringValue : ĠString ?, Ġoffset : ĠInt , Ġmax Byte Length : ĠInt ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchar Length Ġ= Ġstring Value !!. length ĊĠĠĠĠĠĠĠ Ġvar Ġbyte Length Ġ= Ġoffset ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġchar Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Value Ġ= Ġstring Value [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Value . toInt () Ġ>= Ġ 0 x 0 0 0 1 Ġ&& Ġchar Value . toInt () Ġ<= Ġ 0 x 0 0 7 F ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Length ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Value . toInt () Ġ<= Ġ 0 x 0 7 FF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Length Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbyte Length Ġ+= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( byte Length Ġ> Ġmax Byte Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" UTF 8 Ġstring Ġtoo Ġlarge ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠCompute Ġwhere Ġ' byte Length ' Ġmust Ġbe Ġstored Ġin Ġ' data ', Ġand Ġstore Ġit Ġat Ġthis Ġlocation . ĊĠĠĠĠĠĠĠ Ġval Ġbyte Length Offset Ġ= Ġlength Ġ- Ġoffset Ġ- Ġ 2 ĊĠĠĠĠĠĠĠ Ġif Ġ( byte Length Offset Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ byte Length Offset ] Ġ= Ġ( byte Length Ġ ush r Ġ 8 ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ byte Length Offset Ġ+ Ġ 1 ] Ġ= Ġbyte Length . to Byte () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ+ Ġbyte Length Ġ- Ġoffset Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( byte Length Ġ- Ġoffset ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Length Ġ= Ġlength ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġoffset Ġuntil Ġchar Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Value Ġ= Ġstring Value [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Value . toInt () Ġ>= Ġ 0 x 0 0 0 1 Ġ&& Ġchar Value . toInt () Ġ<= Ġ 0 x 0 0 7 F ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= Ġchar Value . to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Value . toInt () Ġ<= Ġ 0 x 0 7 FF ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= Ġ( 0 xC 0 Ġor Ġchar Value . toInt () Ġshr Ġ 6 Ġand Ġ 0 x 1 F ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= Ġ( 0 x 8 0 Ġor Ġchar Value . toInt () Ġand Ġ 0 x 3 F ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= Ġ( 0 xE 0 Ġor Ġchar Value . toInt () Ġshr Ġ 1 2 Ġand Ġ 0 xF ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= Ġ( 0 x 8 0 Ġor Ġchar Value . toInt () Ġshr Ġ 6 Ġand Ġ 0 x 3 F ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ current Length ++] Ġ= Ġ( 0 x 8 0 Ġor Ġchar Value . toInt () Ġand Ġ 0 x 3 F ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlength Ġ= Ġcurrent Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPut s Ġan Ġarray Ġof Ġbytes Ġinto Ġthis Ġbyte Ġvector . ĠThe Ġbyte Ġvector Ġis Ġautomatically Ġen lar ged Ġif ĊĠĠĠĠ Ġ* Ġnecessary . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠbyteArray Value Ġan Ġarray Ġof Ġbytes . ĠMay Ġbe Ġnull Ġto Ġput Ġ` byte Length ` Ġnull ĊĠĠĠĠ Ġ* Ġbytes Ġinto Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ* Ġ@ param Ġbyte Offset Ġindex Ġof Ġthe Ġfirst Ġbyte Ġof ĠbyteArray Value Ġthat Ġmust Ġbe Ġcopied . ĊĠĠĠĠ Ġ* Ġ@ param Ġbyte Length Ġnumber Ġof Ġbytes Ġof ĠbyteArray Value Ġthat Ġmust Ġbe Ġcopied . ĊĠĠĠĠ Ġ* Ġ@ return Ġthis Ġbyte Ġvector . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġput ByteArray ( ĊĠĠĠĠĠĠĠ ĠbyteArray Value : ĠByteArray ?, Ġbyte Offset : ĠInt , Ġbyte Length : ĠInt ĊĠĠĠ Ġ): ĠByte Vector Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ+ Ġbyte Length Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġen large ( byte Length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( byteArray Value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . arraycopy ( byteArray Value , Ġbyte Offset , Ġdata , Ġlength , Ġbyte Length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlength Ġ+= Ġbyte Length ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn lar ges Ġthis Ġbyte Ġvector Ġso Ġthat Ġit Ġcan Ġreceive Ġ' size ' Ġmore Ġbytes . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsize Ġnumber Ġof Ġadditional Ġbytes Ġthat Ġthis Ġbyte Ġvector Ġshould Ġbe Ġable Ġto Ġreceive . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġen large ( size : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( length Ġ> Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Internal Ġerror ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdouble Capacity Ġ= Ġ 2 Ġ* Ġdata . size ĊĠĠĠĠĠĠĠ Ġval Ġminimal Capacity Ġ= Ġlength Ġ+ Ġsize ĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= ĠByteArray ( if Ġ( double Capacity Ġ> Ġminimal Capacity ) Ġdouble Capacity Ġelse Ġminimal Capacity ) ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( data , Ġ 0 , ĠnewData , Ġ 0 , Ġlength ) ĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠnewData ĊĠĠĠ Ġ} Ċ } Ċ