KReaderExt.kt

package org.knio.core.io

import org.knio.core.context.getKnioContext
import org.knio.core.context.getCharBufferSize

suspend fun KReader.readText(): String {
    val context = getKnioContext()
    val buffer = context.byteBufferPool.acquire(getCharBufferSize(context.maxTaskBufferSize))

    try {
        val buff = buffer.asCharBuffer()

        val sb = StringBuilder()
        var read = this.read(buff)
        buff.flip()
        while (read != -1) {
            sb.append(buff)

            buff.clear()
            read = this.read(buff)
            buff.flip()
        }

        return sb.toString()
    } finally {
        context.byteBufferPool.release(buffer)
    }
}

suspend fun KReader.buffered(bufferSize: Int? = null): KBufferedReader {
    return KBufferedReader.open(this, bufferSize)
}