package Ġcom . github . j async . sql . db . postgresql . column Ċ Ċ import Ġcom . github . j async . sql . db . column . Column Encoder Decoder Ċ import Ġcom . github . j async . sql . db . util . Hex Codec Ċ import Ġcom . github . j async . sql . db . util . XXX Ċ import Ġio . netty . buffer . Byte Buf Ċ import Ġjava . nio . ByteBuffer Ċ Ċ object ĠByteArray Encoder Decoder Ġ: ĠColumn Encoder Decoder Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠHex Start Ġ= Ġ"\\ x " ĊĠĠĠ Ġprivate Ġval ĠHex Start Chars Ġ= ĠHex Start . toCharArray () ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( value : ĠString ): ĠByteArray Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( value . startsWith ( Hex Start )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHex Codec . decode ( value , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDefault Ġencoding Ġis Ġ' escape ' ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSize Ġthe Ġbuffer Ġto Ġthe Ġlength Ġof Ġthe Ġstring , Ġthe Ġdata Ġcan 't Ġbe Ġbigger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . allocate ( value . length ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġci Ġ= Ġvalue . iterator () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( ci . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ci 1 Ġ= Ġci . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( next Ci 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\\ ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ci 2 Ġ= Ġget Char Or Die ( ci ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( next Ci 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\\ ' Ġ-> Ġbuffer . put ('\\ '. to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Digit Ġ= Ġget Char Or Die ( ci ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthird Digit Ġ= Ġget Char Or Die ( ci ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMust Ġalways Ġbe Ġin Ġtrip lets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInteger . decode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 $ next Ci 2 $ second Digit $ third Digit " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Byte () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġbuffer . put ( next Ci 1 . to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . flip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal Array Ġ= ĠByteArray ( buffer . remaining ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . get ( final Array ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Array ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġis Ġrequired Ġsince Ġ{@ link ĠIterator # next } Ġwhen Ġ{@ lin ke ĠIterator # hasNext } Ġis Ġfalse Ġis Ġun fun ined . ĊĠĠĠĠ Ġ* Ġ@ param Ġci Ġthe Ġiterator Ġsource Ġof Ġthe Ġdata ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġnext Ġcharacter ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġthere Ġis Ġno Ġnext Ġcharacter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Char Or Die ( ci : ĠIterator < Char >): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( ci . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġci . next () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Expected Ġescape Ġsequence Ġcharacter , Ġfound Ġnothing ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarray : ĠByteArray Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠByteArray Ġ-> Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠByteBuffer Ġ&& Ġvalue . has Array () Ġ-> Ġvalue . array () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠByteBuffer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= ĠByteArray ( value . remaining ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . get ( arr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠByte Buf Ġ&& Ġvalue . has Array () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġis ĠByte Buf Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= ĠByteArray ( value . readable Bytes ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . getBytes ( 0 , Ġarr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠXXX ("$ value Ġ- Ġ${ value . java Class }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠHex Codec . encode ( array , ĠHex Start Chars ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ