ByteChannel

Sequential (non-concurrent) byte channel implementation

Constructors

Link copied to clipboard
constructor(autoFlush: Boolean = false)

Properties

Link copied to clipboard
val autoFlush: Boolean = false
Link copied to clipboard
Link copied to clipboard
open override val closedCause: Throwable?
Link copied to clipboard
open override val isClosedForRead: Boolean
Link copied to clipboard
open override val isClosedForWrite: Boolean
Link copied to clipboard
open override val readBuffer: Source
Link copied to clipboard
Link copied to clipboard
open override val writeBuffer: Sink

Functions

Link copied to clipboard
fun ByteChannel.attachJob(job: Job)

Ensures that when the given job is canceled, the ByteChannel is canceled with the same exception.

Link copied to clipboard
open suspend override fun awaitContent(min: Int): Boolean

Suspend the channel until it has min bytes or gets closed. Throws exception if the channel was closed with an error. If there are bytes available in the channel, this function returns immediately.

Link copied to clipboard
Link copied to clipboard
open override fun cancel(cause: Throwable?)
Link copied to clipboard
Link copied to clipboard
open override fun close()

Flush all pending bytes from writeBuffer to the internal read buffer without suspension and initiate channel close.

Link copied to clipboard
Link copied to clipboard
suspend fun ByteReadChannel.copyAndClose(channel: ByteWriteChannel, limit: Long = Long.MAX_VALUE): Long
Link copied to clipboard
suspend fun ByteReadChannel.copyTo(channel: ByteWriteChannel, limit: Long): Long
suspend fun ByteReadChannel.copyTo(channel: WritableByteChannel, limit: Long = Long.MAX_VALUE): Long

Copy up to limit bytes to blocking NIO channel. Copying to a non-blocking channel requires selection and not supported. It is suspended if no data are available in a byte channel but may block if destination NIO channel blocks.

suspend fun ByteReadChannel.copyTo(out: OutputStream, limit: Long = Long.MAX_VALUE): Long

Copies up to limit bytes from this byte channel to out stream suspending on read channel and blocking on output

Link copied to clipboard
suspend fun ByteReadChannel.discard(max: Long = Long.MAX_VALUE): Long
Link copied to clipboard
suspend fun ByteReadChannel.discardExact(value: Long)
Link copied to clipboard
open suspend override fun flush()
Link copied to clipboard
open suspend override fun flushAndClose()
Link copied to clipboard
Link copied to clipboard
open override fun flushWriteBuffer()

Flush all pending bytes from writeBuffer to the internal read buffer without suspension.

Link copied to clipboard
suspend fun ByteReadChannel.lookAhead(block: suspend LookAheadSuspendSession.() -> Unit)
Link copied to clipboard
Link copied to clipboard
inline suspend fun ByteReadChannel.read(crossinline block: suspend (ByteArray, Int, Int) -> Int): Int
inline suspend fun ByteReadChannel.read(min: Int = 1, noinline consumer: (ByteBuffer) -> Unit)

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.

Link copied to clipboard
fun ByteReadChannel.readAvailable(min: Int, block: (Buffer) -> Int): Int

Invokes block if it is possible to read at least min byte providing buffer to it so lambda can read from the buffer up to Buffer.readRemaining bytes. If there are no min bytes available then the invocation returns -1.

suspend fun ByteReadChannel.readAvailable(buffer: ByteArray, offset: Int = 0, length: Int = buffer.size - offset): Int

Reads all available bytes to dst buffer and returns immediately or suspends if no bytes available

Reads bytes from the channel and writes them to the buffer up to its limit. If the channel's read buffer is exhausted, it suspends until there are bytes available.

Invokes block if it is possible to read at least min byte providing byte buffer to it so lambda can read from the buffer up to ByteBuffer.available bytes. If there are no min bytes available then the invocation returns 0.

suspend fun ByteReadChannel.readAvailable(dst: CPointer<ByteVar>, offset: Int, length: Int): Int

Reads all available bytes to dst buffer and returns immediately or suspends if no bytes available

Link copied to clipboard
suspend fun ByteReadChannel.readBuffer(): Buffer
suspend fun ByteReadChannel.readBuffer(max: Int): Buffer
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Reads all length bytes to dst buffer or fails if channel has been closed. Suspends if not enough bytes available.

suspend fun ByteReadChannel.readFully(buffer: ByteBuffer)
Link copied to clipboard
suspend fun ByteReadChannel.readInt(): Int
Link copied to clipboard
Link copied to clipboard

Reads a packet of packet bytes from the channel.

Link copied to clipboard
Link copied to clipboard
suspend fun ByteReadChannel.readUntilDelimiter(delimiter: ByteString, out: ByteBuffer): Int
Link copied to clipboard
Link copied to clipboard
suspend fun ByteReadChannel.readUTF8LineTo(out: Appendable, max: Int = Int.MAX_VALUE): Boolean

Reads a line of UTF-8 characters to the specified out buffer. It recognizes CR, LF and CRLF as a line delimiter.

Link copied to clipboard
suspend fun ByteReadChannel.skipDelimiter(delimiter: ByteBuffer)
suspend fun ByteReadChannel.skipDelimiter(delimiter: ByteString)
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
fun ByteReadChannel.toInputStream(parent: Job? = null): InputStream

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

Link copied to clipboard

Create blocking java.io.OutputStream for this channel that does block every time the channel suspends at write Similar to do reading in runBlocking however you can pass it to regular blocking API

Link copied to clipboard
open override fun toString(): String
Link copied to clipboard
suspend fun ByteWriteChannel.write(desiredSpace: Int = 1, block: (ByteArray, Int, Int) -> Int): Int

Await for desiredSpace will be available for write and invoke block function providing Memory instance and the corresponding range suitable for wiring in the memory. The block function should return number of bytes were written, possibly 0.

suspend fun ByteWriteChannel.write(min: Int = 1, block: (buffer: ByteBuffer) -> Unit)
Link copied to clipboard

Invokes block if it is possible to write at least min byte providing byte buffer to it so lambda can write to the buffer up to ByteBuffer.remaining bytes. If there are no min bytes spaces available then the invocation returns 0.

Link copied to clipboard
suspend fun ByteWriteChannel.writeBuffer(value: Source)
Link copied to clipboard
suspend fun ByteWriteChannel.writeByte(value: Byte)
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
suspend fun ByteWriteChannel.writeFully(value: ByteArray, startIndex: Int = 0, endIndex: Int = value.size)
suspend fun ByteWriteChannel.writeFully(value: CPointer<ByteVar>, offset: Int, length: Int)
suspend fun ByteWriteChannel.writeFully(src: CPointer<ByteVar>, offset: Long, length: Long)
Link copied to clipboard
suspend fun ByteWriteChannel.writeInt(value: Int)
Link copied to clipboard
suspend fun ByteWriteChannel.writeLong(value: Long)
Link copied to clipboard
suspend fun ByteWriteChannel.writePacket(copy: Buffer)
suspend fun ByteWriteChannel.writePacket(copy: Source)
Link copied to clipboard
suspend fun ByteWriteChannel.writeShort(value: Short)
Link copied to clipboard
suspend fun ByteWriteChannel.writeSource(source: Source)
Link copied to clipboard
suspend fun ByteWriteChannel.writeString(value: String)
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
inline suspend fun ByteWriteChannel.writeWhile(crossinline block: (ByteBuffer) -> Boolean)