package Ġpw . bin om . io čĊč Ċ import Ġpw . bin om .* č Ċ import Ġpw . bin om . charset . Charset č Ċ import Ġpw . bin om . charset . Charset Transform Result č Ċ import Ġpw . bin om . charset . Charsets č Ċ import Ġpw . bin om . pool . Object Pool čĊč Ċ class ĠBuffered Output Append able Ġprivate Ġconstructor ( čĊĠĠĠ Ġcharset : ĠCharset , čĊĠĠĠ Ġval Ġoutput : ĠOutput , čĊĠĠĠ Ġprivate Ġval Ġpool : ĠObject Pool < ByteBuffer > ?, čĊĠĠĠ Ġchar BufferSize : ĠInt , čĊĠĠĠ Ġval Ġclose Parent : ĠBoolean , čĊĠĠĠ Ġprivate Ġval Ġbuffer : ĠByteBuffer , čĊĠĠĠ Ġprivate Ġvar Ġclose Buffer : ĠBoolean , č Ċ ) Ġ: ĠAppend able , ĠFlush able , ĠClose able Ġ{ čĊčĊĠĠĠ Ġconstructor ( čĊĠĠĠĠĠĠĠ Ġcharset : ĠCharset Ġ= ĠChar sets . UTF 8 , čĊĠĠĠĠĠĠĠ Ġoutput : ĠOutput , čĊĠĠĠĠĠĠĠ Ġpool : ĠObject Pool < ByteBuffer >, čĊĠĠĠĠĠĠĠ Ġchar BufferSize : ĠInt Ġ= ĠDEFAULT _ BUFFER _ SIZE Ġ/ Ġ 2 , čĊĠĠĠĠĠĠĠ Ġclose Parent : ĠBoolean Ġ= Ġtrue , čĊĠĠĠ Ġ) Ġ: Ġthis ( čĊĠĠĠĠĠĠĠ Ġcharset Ġ= Ġcharset , čĊĠĠĠĠĠĠĠ Ġoutput Ġ= Ġoutput , čĊĠĠĠĠĠĠĠ Ġpool Ġ= Ġpool , čĊĠĠĠĠĠĠĠ Ġchar BufferSize Ġ= Ġchar BufferSize , čĊĠĠĠĠĠĠĠ Ġclose Parent Ġ= Ġclose Parent , čĊĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġpool . borrow (), čĊĠĠĠĠĠĠĠ Ġclose Buffer Ġ= Ġfalse , čĊĠĠĠ Ġ) čĊčĊĠĠĠ Ġconstructor ( čĊĠĠĠĠĠĠĠ Ġcharset : ĠCharset Ġ= ĠChar sets . UTF 8 , čĊĠĠĠĠĠĠĠ Ġoutput : ĠOutput , čĊĠĠĠĠĠĠĠ ĠbufferSize : ĠInt Ġ= ĠDEFAULT _ BUFFER _ SIZE , čĊĠĠĠĠĠĠĠ Ġchar BufferSize : ĠInt Ġ= ĠbufferSize Ġ/ Ġ 2 , čĊĠĠĠĠĠĠĠ Ġclose Parent : ĠBoolean Ġ= Ġtrue , čĊĠĠĠ Ġ) Ġ: Ġthis ( čĊĠĠĠĠĠĠĠ Ġcharset Ġ= Ġcharset , čĊĠĠĠĠĠĠĠ Ġoutput Ġ= Ġoutput , čĊĠĠĠĠĠĠĠ Ġpool Ġ= Ġnull , čĊĠĠĠĠĠĠĠ Ġchar BufferSize Ġ= Ġchar BufferSize , čĊĠĠĠĠĠĠĠ Ġclose Parent Ġ= Ġclose Parent , čĊĠĠĠĠĠĠĠ Ġbuffer Ġ= ĠByteBuffer . alloc ( buffer Size ), čĊĠĠĠĠĠĠĠ Ġclose Buffer Ġ= Ġtrue , čĊĠĠĠ Ġ) čĊčĊĠĠĠ Ġconstructor ( čĊĠĠĠĠĠĠĠ Ġcharset : ĠCharset Ġ= ĠChar sets . UTF 8 , čĊĠĠĠĠĠĠĠ Ġoutput : ĠOutput , čĊĠĠĠĠĠĠĠ Ġbuffer : ĠByteBuffer , čĊĠĠĠĠĠĠĠ Ġchar BufferSize : ĠInt Ġ= Ġbuffer . capacity Ġ/ Ġ 2 , čĊĠĠĠĠĠĠĠ Ġclose Parent : ĠBoolean Ġ= Ġtrue , čĊĠĠĠ Ġ) Ġ: Ġthis ( čĊĠĠĠĠĠĠĠ Ġcharset Ġ= Ġcharset , čĊĠĠĠĠĠĠĠ Ġoutput Ġ= Ġoutput , čĊĠĠĠĠĠĠĠ Ġpool Ġ= Ġnull , čĊĠĠĠĠĠĠĠ Ġchar BufferSize Ġ= Ġchar BufferSize , čĊĠĠĠĠĠĠĠ Ġclose Parent Ġ= Ġclose Parent , čĊĠĠĠĠĠĠĠ Ġbuffer Ġ= Ġbuffer , čĊĠĠĠĠĠĠĠ Ġclose Buffer Ġ= Ġfalse , čĊĠĠĠ Ġ) čĊčĊĠĠĠ Ġval Ġchar Buffer Ġ= ĠChar Buffer . alloc ( char BufferSize ) čĊĠĠĠ Ġval Ġencoder Ġ= Ġcharset . new Encoder () čĊčĊĠĠĠ Ġprivate Ġvar Ġclosed Ġ= Ġfalse čĊĠĠĠ Ġval Ġis Closed čĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġclosed čĊčĊĠĠĠ Ġprivate Ġfun Ġcheck Closed () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( closed ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Writer Ġalready Ġclosed ") čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcheck Flush () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( char Buffer . remaining Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġflush () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġappend ( c : ĠChar ): ĠAppend able Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġcheck Flush () čĊĠĠĠĠĠĠĠ Ġchar Buffer . put ( c ) čĊĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġappend ( cs q : ĠCharSequence ?): ĠAppend able Ġ{ čĊĠĠĠĠĠĠĠ Ġc sq Ġ?: Ġreturn Ġthis čĊĠĠĠĠĠĠĠ Ġreturn Ġappend ( cs q , Ġ 0 , Ġc sq . length ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġappend ( cs q : ĠCharSequence ?, Ġstart : ĠInt , Ġend : ĠInt ): ĠAppend able Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġc sq Ġ?: Ġreturn Ġthis čĊĠĠĠĠĠĠĠ Ġif Ġ( cs q . isEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( start Ġ== Ġend ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Flush () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar Buffer . put ( cs q [ start ]) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġif Ġ( cs q Ġis ĠString ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġc sq . toCharArray ( start , Ġend ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠChar Array ( end Ġ- Ġstart ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc sq [ it Ġ+ Ġstart ] čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġwhile Ġ( pos Ġ< Ġarray . size ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Flush () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrote Ġ= Ġchar Buffer . write ( array , Ġpos ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( w rote Ġ<= Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIOException (" Can 't Ġappend Ġdata Ġto ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ+= Ġwrote čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġflush () Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġif Ġ( char Buffer . remaining Ġ== Ġchar Buffer . capacity ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġchar Buffer . flip () čĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . clear () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġencoder . encode ( char Buffer , Ġbuffer ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . flip () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffer . remaining Ġ!= Ġbuffer . capacity ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . write ( buffer ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . clear () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ== ĠCharset Transform Result . SUCCESS Ġ|| Ġchar Buffer . remaining Ġ== Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġchar Buffer . clear () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ čĊĠĠĠĠĠĠĠ Ġcheck Closed () čĊĠĠĠĠĠĠĠ Ġflush () čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( close Buffer ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpool ?. recycle ( buffer ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( close Parent ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . close () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġclosed Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ } čĊč Ċ fun ĠOutput . buffered Writer ( čĊĠĠĠ Ġpool : ĠObject Pool < ByteBuffer >, čĊĠĠĠ Ġcharset : ĠCharset Ġ= ĠChar sets . UTF 8 , čĊĠĠĠ Ġchar BufferSize : ĠInt Ġ= Ġ 5 1 2 , čĊĠĠĠ Ġclose Parent : ĠBoolean Ġ= Ġtrue č Ċ ) Ġ= ĠBuffered Output Append able ( čĊĠĠĠ Ġcharset Ġ= Ġcharset , čĊĠĠĠ Ġoutput Ġ= Ġthis , čĊĠĠĠ Ġpool Ġ= Ġpool , čĊĠĠĠ Ġchar BufferSize Ġ= Ġchar BufferSize , čĊĠĠĠ Ġclose Parent Ġ= Ġclose Parent č Ċ ) čĊč Ċ fun ĠOutput . buffered Writer ( čĊĠĠĠ ĠbufferSize : ĠInt Ġ= ĠDEFAULT _ BUFFER _ SIZE , čĊĠĠĠ Ġcharset : ĠCharset Ġ= ĠChar sets . UTF 8 , čĊĠĠĠ Ġchar BufferSize : ĠInt Ġ= ĠbufferSize Ġ/ Ġ 2 , čĊĠĠĠ Ġclose Parent : ĠBoolean Ġ= Ġtrue č Ċ ) Ġ= ĠBuffered Output Append able ( čĊĠĠĠ Ġcharset Ġ= Ġcharset , čĊĠĠĠ Ġoutput Ġ= Ġthis , čĊĠĠĠ ĠbufferSize Ġ= ĠbufferSize , čĊĠĠĠ Ġchar BufferSize Ġ= Ġchar BufferSize , čĊĠĠĠ Ġclose Parent Ġ= Ġclose Parent č Ċ ) čĊč Ċ fun ĠOutput . buffered Writer ( čĊĠĠĠ Ġbuffer : ĠByteBuffer , čĊĠĠĠ Ġcharset : ĠCharset Ġ= ĠChar sets . UTF 8 , čĊĠĠĠ Ġchar BufferSize : ĠInt Ġ= Ġbuffer . capacity Ġ/ Ġ 2 , čĊĠĠĠ Ġclose Parent : ĠBoolean Ġ= Ġtrue č Ċ ) Ġ= ĠBuffered Output Append able ( čĊĠĠĠ Ġcharset Ġ= Ġcharset , čĊĠĠĠ Ġoutput Ġ= Ġthis , čĊĠĠĠ Ġbuffer Ġ= Ġbuffer , čĊĠĠĠ Ġchar BufferSize Ġ= Ġchar BufferSize , čĊĠĠĠ Ġclose Parent Ġ= Ġclose Parent č Ċ )