// ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . intellij . util . io Ċ Ċ import Ġcom . intellij . util . Smart List Ċ import Ġcom . intellij . util . text . CharArray CharSequence Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . net . URL Encoder Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Char Buffer Ċ import Ġjava . util .* Ċ Ċ fun ĠInputStreamReader . read CharSequence ( length : ĠInt ): ĠCharSequence Ġ{ ĊĠ Ġuse Ġ{ ĊĠĠĠ Ġval Ġchars Ġ= ĠChar Array ( length ) ĊĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( count Ġ< Ġchars . size ) Ġ{ ĊĠĠĠĠĠ Ġval Ġn Ġ= Ġread ( chars , Ġcount , Ġchars . size Ġ- Ġcount ) ĊĠĠĠĠĠ Ġif Ġ( n Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcount Ġ+= Ġn ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠCharSequence Back edBy Chars ( chars , Ġ 0 , Ġcount ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThink Ġtwice Ġbefore Ġuse Ġ- Ġconsider Ġto Ġto Ġspecify Ġlength . Ċ Ġ*/ Ċ fun ĠInputStreamReader . read CharSequence (): ĠCharSequence Ġ{ ĊĠ Ġvar Ġchars Ġ= ĠChar Array ( DEFAULT _ BUFFER _ SIZE ) ĊĠ Ġvar Ġbuffers : ĠMutable List < CharArray >? Ġ= Ġnull ĊĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠ Ġvar Ġtotal Ġ= Ġ 0 ĊĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠ Ġval Ġn Ġ= Ġread ( chars , Ġcount , Ġchars . size Ġ- Ġcount ) ĊĠĠĠ Ġif Ġ( n Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġbreak ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcount Ġ+= Ġn ĊĠĠĠ Ġtotal Ġ+= Ġn ĊĠĠĠ Ġif Ġ( count Ġ== Ġchars . size ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( buffers Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuffers Ġ= ĠSmart List < CharArray >() ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġbuffers . add ( chars ) ĊĠĠĠĠĠ Ġval Ġnew Length Ġ= ĠMath . min ( 1 0 2 4 Ġ* Ġ 1 0 2 4 , Ġchars . size Ġ* Ġ 2 ) ĊĠĠĠĠĠ Ġchars Ġ= ĠChar Array ( new Length ) ĊĠĠĠĠĠ Ġcount Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġif Ġ( buffers Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn ĠCharSequence Back edBy Chars ( chars , Ġ 0 , Ġtotal ) ĊĠ Ġ} ĊĊĠ Ġval Ġresult Ġ= ĠChar Array ( total ) ĊĠ Ġfor Ġ( buffer Ġin Ġbuffers ) Ġ{ ĊĠĠĠ ĠSystem . arraycopy ( buffer , Ġ 0 , Ġresult , Ġresult . size Ġ- Ġtotal , Ġbuffer . size ) ĊĠĠĠ Ġtotal Ġ-= Ġbuffer . size ĊĠ Ġ} ĊĠ ĠSystem . arraycopy ( chars , Ġ 0 , Ġresult , Ġresult . size Ġ- Ġtotal , Ġtotal ) ĊĠ Ġreturn ĠCharSequence Back edBy Chars ( result ) Ċ } Ċ Ċ // Ġwe Ġmust Ġreturn Ġstring Ġon Ġsub Sequence () Ġ- ĠJson Reader Ex Ġwill Ġcall ĠtoString Ġin Ġany Ġcase Ċ class ĠCharSequence Back edBy Chars Ġ: ĠChar Array CharSequence Ġ{ ĊĠ Ġval Ġbyte Buffer : ĠByteBuffer ĊĠĠĠ Ġget () Ġ= ĠChar sets . UTF _ 8 . encode ( Char Buffer . wrap ( my Chars , Ġmy Start , Ġlength )) ĊĊĠ Ġconstructor ( char Buffer : ĠChar Buffer ) Ġ: Ġsuper ( char Buffer . array (), Ġchar Buffer . array Offset (), Ġchar Buffer . position ()) ĊĊĠ Ġconstructor ( chars : ĠChar Array , Ġstart : ĠInt , Ġend : ĠInt ) Ġ: Ġsuper ( chars , Ġstart , Ġend ) ĊĊĠ Ġconstructor ( chars : ĠChar Array ) Ġ: Ġsuper (* chars ) ĊĊĠ Ġoverride Ġfun Ġsub Sequence ( startIndex : ĠInt , Ġend Index : ĠInt ): ĠCharSequence Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( startIndex Ġ== Ġ 0 Ġ&& Ġend Index Ġ== Ġlength ) Ġthis Ġelse ĠString ( my Chars , Ġmy Start Ġ+ ĠstartIndex , Ġend Index Ġ- ĠstartIndex ) ĊĠ Ġ} Ċ } Ċ Ċ fun ĠByteBuffer . toByteArray (): ĠByteArray Ġ{ ĊĠ Ġif Ġ( has Array ()) Ġ{ ĊĠĠĠ Ġval Ġoffset Ġ= Ġarray Offset () ĊĠĠĠ Ġif Ġ( offset Ġ== Ġ 0 Ġ&& Ġarray (). size Ġ== Ġlimit ()) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġarray () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠArrays . copyOf Range ( array (), Ġoffset , Ġoffset Ġ+ Ġlimit ()) ĊĠ Ġ} ĊĊĠ Ġval Ġbytes Ġ= ĠByteArray ( limit ()) ĊĠ Ġget ( bytes ) ĊĠ Ġreturn Ġbytes Ċ } Ċ Ċ fun ĠString . encode Url QueryParameter (): ĠString Ġ= ĠURL Encoder . encode ( this , ĠChar sets . UTF _ 8 . name ()) !! Ċ Ċ fun ĠString . decode Base 6 4 (): ĠByteArray Ġ= ĠBase 6 4 . get Decoder (). decode ( this )