ByteReadChannel
expect interface ByteReadChannel
Channel for asynchronous reading of sequences of bytes. This is a single-reader channel.
Operations on this channel cannot be invoked concurrently.
Properties
abstract val availableForRead: Int Returns number of bytes that can be read without suspension. Read operations do no suspend and return immediately when this number is at least the number of bytes requested for read. |
|
abstract val isClosedForRead: Boolean Returns |
|
abstract val isClosedForWrite: Boolean |
|
abstract var Byte order that is used for multi-byte read operations (such as readShort, readInt, readLong, readFloat, and readDouble). |
|
abstract val Number of bytes read from the channel. It is not guaranteed to be atomic so could be updated in the middle of long running read operation. |
Functions
Close channel with optional cause cancellation. Unlike ByteWriteChannel.close that could close channel normally, cancel does always close with error so any operations on this channel will always fail and all suspensions will be resumed with exception. |
|
open suspend fun For every available bytes range invokes visitor function until it return false or end of stream encountered |
|
Discard up to max bytes |
|
abstract fun <R> |
|
abstract suspend fun <R> |
|
abstract suspend fun peekTo( Try to copy at least min but up to max bytes to the specified destination buffer from this input
skipping offset bytes. If there are not enough bytes available to provide min bytes after skipping offset
bytes then it will trigger the underlying source reading first and after that will
simply copy available bytes even if EOF encountered so min is not a requirement but a desired number of bytes.
It is safe to specify max greater than the destination free space.
|
|
abstract suspend fun read( Invokes consumer when it will be possible to read at least min bytes providing byte buffer to it so lambda can read from the buffer up to ByteBuffer.remaining bytes. If there are no min bytes available then the invocation could suspend until the requirement will be met. |
|
Reads all available bytes to dst buffer and returns immediately or suspends if no bytes available abstract suspend fun readAvailable(dst: ByteBuffer): Int |
|
abstract suspend fun readBoolean(): Boolean Reads a boolean value (suspending if no bytes available yet) or fails if channel has been closed and not enough bytes. |
|
abstract suspend fun readByte(): Byte Reads a byte (suspending if no bytes available yet) or fails if channel has been closed and not enough bytes. |
|
abstract suspend fun readDouble(): Double Reads double number (suspending if not enough bytes available) or fails if channel has been closed and not enough bytes. |
|
abstract suspend fun readFloat(): Float Reads float number (suspending if not enough bytes available) or fails if channel has been closed and not enough bytes. |
|
Reads all length bytes to dst buffer or fails if channel has been closed. Suspends if not enough bytes available. abstract suspend fun readFully(dst: ByteBuffer): Int |
|
abstract suspend fun readInt(): Int Reads an int number (suspending if not enough bytes available) or fails if channel has been closed and not enough bytes. |
|
abstract suspend fun readLong(): Long Reads a long number (suspending if not enough bytes available) or fails if channel has been closed and not enough bytes. |
|
abstract suspend fun readPacket( Reads the specified amount of bytes and makes a byte packet from them. Fails if channel has been closed and not enough bytes available. Accepts headerSizeHint to be provided, see BytePacketBuilder. |
|
abstract suspend fun readRemaining( Reads up to limit bytes and makes a byte packet or until end of stream encountered. Accepts headerSizeHint to be provided, see BytePacketBuilder. |
|
abstract fun Starts non-suspendable read session. After channel preparation consumer lambda will be invoked immediately event if there are no bytes available for read yet. |
|
abstract suspend fun readShort(): Short Reads a short number (suspending if not enough bytes available) or fails if channel has been closed and not enough bytes. |
|
abstract suspend fun Starts a suspendable read session. After channel preparation consumer lambda will be invoked immediately even if there are no bytes available for read yet. consumer lambda could suspend as much as needed. |
|
Reads a line of UTF-8 characters up to limit characters. Supports both CR-LF and LF line endings. Throws an exception if the specified limit has been exceeded. |
|
Reads a line of UTF-8 characters to the specified out buffer up to limit characters. Supports both CR-LF and LF line endings. No line ending characters will be appended to out buffer. Throws an exception if the specified limit has been exceeded. |
Companion Object Properties
val Empty: ByteReadChannel |
Extension Functions
fun ByteReadChannel.cancel(): Boolean |
|
suspend fun ByteReadChannel.consumeEachBufferRange( For every available bytes range invokes visitor function until it return false or end of stream encountered |
|
suspend fun ByteReadChannel.copyAndClose( Reads all the bytes from receiver channel and writes them to dst channel and then closes it. Closes dst channel if fails to read or write with cause exception. |
|
suspend expect fun ByteReadChannel.copyTo( Reads up to limit bytes from receiver channel and writes them to dst channel. Closes dst channel if fails to read or write with cause exception. |
|
suspend fun ByteReadChannel.copyTo( Copies up to limit bytes from this byte channel to out stream suspending on read channel and blocking on output |
|
suspend fun ByteReadChannel.copyTo( Copy up to limit bytes to blocking NIO channel. Copying to non-blocking channel requires selection and not supported. It does suspend if no data available in byte channel but may block if destination NIO channel blocks. suspend fun ByteReadChannel.copyTo( Copy up to limit bytes to blocking pipe. A shortcut to copyTo function with NIO channel destination |
|
fun ByteReadChannel.copyToBoth( Copy source channel to both output channels chunk by chunk. |
|
fun ByteReadChannel.deflated( Launch a coroutine on coroutineContext that does deflate compression
optionally doing CRC and writing GZIP header and trailer if gzip = |
|
suspend fun ByteReadChannel.discard(): Long Discards all bytes in the channel and suspends until end of stream. |
|
suspend fun ByteReadChannel.discardExact(n: Long): Unit Discards exactly n bytes or fails if not enough bytes in the channel |
|
suspend expect fun ByteReadChannel.joinTo( |
|
suspend fun ByteReadChannel.pass( Read data chunks from ByteReadChannel using buffer |
|
suspend fun ByteReadChannel.read( Await until at least desiredSize is available for read or EOF and invoke block function. The block function should never capture a provided Memory instance outside otherwise an undefined behaviour may occur including accidental crash or data corruption. Block function should return number of bytes consumed or 0. |
|
suspend fun ByteReadChannel.readAvailable( |
|
suspend fun ByteReadChannel.readDouble( |
|
suspend fun ByteReadChannel.readDoubleLittleEndian(): Double |
|
suspend fun ByteReadChannel.readFloat( |
|
suspend fun ByteReadChannel.readFloatLittleEndian(): Float |
|
suspend fun ByteReadChannel.readFully(dst: IoBuffer): Unit suspend fun ByteReadChannel.readFully(dst: ByteArray): Unit |
|
suspend fun ByteReadChannel.readInt( |
|
suspend fun ByteReadChannel.readIntLittleEndian(): Int |
|
suspend fun ByteReadChannel.readLong( |
|
suspend fun ByteReadChannel.readLongLittleEndian(): Long |
|
suspend fun ByteReadChannel.readPacket( Reads the specified amount of bytes and makes a byte packet from them. Fails if channel has been closed and not enough bytes available. |
|
suspend fun ByteReadChannel.readRemaining( Reads up to limit bytes and makes a byte packet or until end of stream encountered. suspend fun ByteReadChannel.readRemaining(): ByteReadPacket Reads all remaining bytes and makes a byte packet |
|
suspend fun ByteReadChannel.readShort( |
|
suspend fun ByteReadChannel.readShortLittleEndian(): Short |
|
suspend fun ByteReadChannel.readUTF8Line(): String? |
|
suspend fun ByteReadChannel.readUTF8LineTo( |
|
suspend fun ByteReadChannel.readUntilDelimiter( Reads from the channel to the specified dst byte buffer until one of the following: |
|
suspend fun ByteReadChannel.skipDelimiter( |
|
fun ByteReadChannel.split( Split source ByteReadChannel into 2 new one. Cancel of one channel in split(input or both outputs) cancels other channels. |
|
suspend fun ByteReadChannel.toByteArray(): ByteArray Read channel to byte array. |
|
suspend fun ByteReadChannel.toByteArray( Convert ByteReadChannel to ByteArray |
|
fun ByteReadChannel.toInputStream( Create blocking java.io.InputStream for this channel that does block every time the channel suspends at read Similar to do reading in runBlocking however you can pass it to regular blocking API |
Inheritors
interface ByteChannel : ByteReadChannel, ByteWriteChannel Channel for asynchronous reading and writing of sequences of bytes. This is a buffered single-reader single-writer channel. |
|
abstract class ByteChannelSequentialBase : Sequential (non-concurrent) byte channel implementation |