KorIO Sync Streams
KorIO has functionality to manipulate synchronous streams of data.
Table of contents:
- SyncPositionStream
- SyncLengthStream
- SyncInputStream
- SyncOutputStream
- SyncStream
- SyncStream Slicing
- FillSyncStream
- MemorySyncStream
- FastByteArrayInputStream
SyncPositionStream
interface SyncPositionStream { var position: Long }
SyncLengthStream
interface SyncLengthStream { var length: Long }
SyncInputStream
interface SyncInputStream : OptionalCloseable {
fun read(buffer: ByteArray, offset: Int = 0, len: Int = buffer.size - offset): Int
fun read(): Int = smallBytesPool.alloc2 { if (read(it, 0, 1) > 0) it[0].unsigned else -1 }
}
interface SyncRAInputStream { fun read(position: Long, buffer: ByteArray, offset: Int, len: Int): Int }
fun SyncInputStream.readStringz(charset: Charset = UTF8): String
fun SyncInputStream.readStringz(len: Int, charset: Charset = UTF8): String
fun SyncInputStream.readString(len: Int, charset: Charset = UTF8): String
fun SyncInputStream.readExact(out: ByteArray, offset: Int, len: Int): Unit
fun SyncInputStream.readExactTo(buffer: ByteArray, offset: Int = 0, length: Int
fun SyncInputStream.read(data: ByteArray): Int
fun SyncInputStream.read(data: UByteArray): Int
fun SyncInputStream.readBytesExact(len: Int): ByteArray
fun SyncInputStream.readBytes(len: Int): ByteArray
fun SyncInputStream.readU8(): Int
fun SyncInputStream.readS8(): Int
fun SyncInputStream.readU16LE(): Int
fun SyncInputStream.readU24LE(): Int
fun SyncInputStream.readU32LE(): Long
fun SyncInputStream.readS16LE(): Int
fun SyncInputStream.readS24LE(): Int
fun SyncInputStream.readS32LE(): Int
fun SyncInputStream.readS64LE(): Long
fun SyncInputStream.readF32LE(): Float
fun SyncInputStream.readF64LE(): Double
fun SyncInputStream.readU16BE(): Int
fun SyncInputStream.readU24BE(): Int
fun SyncInputStream.readU32BE(): Long
fun SyncInputStream.readS16BE(): Int
fun SyncInputStream.readS24BE(): Int
fun SyncInputStream.readS32BE(): Int
fun SyncInputStream.readS64BE(): Long
fun SyncInputStream.readF32BE(): Float
fun SyncInputStream.readF64BE(): Double
fun SyncInputStream.readUByteArray(count: Int): UByteArray
fun SyncInputStream.readShortArrayLE(count: Int): ShortArray
fun SyncInputStream.readShortArrayBE(count: Int): ShortArray
fun SyncInputStream.readCharArrayLE(count: Int): CharArray
fun SyncInputStream.readCharArrayBE(count: Int): CharArray
fun SyncInputStream.readIntArrayLE(count: Int): IntArray
fun SyncInputStream.readIntArrayBE(count: Int): IntArray
fun SyncInputStream.readLongArrayLE(count: Int): LongArray
fun SyncInputStream.readLongArrayBE(count: Int): LongArray
fun SyncInputStream.readFloatArrayLE(count: Int): FloatArray
fun SyncInputStream.readFloatArrayBE(count: Int): FloatArray
fun SyncInputStream.readDoubleArrayLE(count: Int): DoubleArray
fun SyncInputStream.readDoubleArrayBE(count: Int): DoubleArray
// Variable Length
fun SyncInputStream.readU_VL(): Int
fun SyncInputStream.readS_VL(): Int
// Copy
fun SyncInputStream.copyTo(target: SyncOutputStream): Unit
SyncOutputStream
interface SyncOutputStream : OptionalCloseable {
fun write(buffer: ByteArray, offset: Int = 0, len: Int = buffer.size - offset): Unit
fun write(byte: Int) = smallBytesPool.alloc2 { it[0] = byte.toByte(); write(it, 0, 1) }
fun flush() = Unit
}
interface SyncRAOutputStream {
fun write(position: Long, buffer: ByteArray, offset: Int, len: Int): Unit
fun flush(): Unit = Unit
}
fun SyncOutputStream.writeString(string: String, charset: Charset = UTF8): Unit
fun SyncOutputStream.writeStringz(str: String, charset: Charset = UTF8)
fun SyncOutputStream.writeStringz(str: String, len: Int, charset: Charset = UTF8)
fun SyncOutputStream.writeBytes(data: ByteArray): Unit
fun SyncOutputStream.writeBytes(data: ByteArray, position: Int, length: Int)
fun SyncOutputStream.write8(v: Int): Unit
fun SyncOutputStream.write16LE(v: Int): Unit
fun SyncOutputStream.write24LE(v: Int): Unit
fun SyncOutputStream.write32LE(v: Int): Unit
fun SyncOutputStream.write32LE(v: Long): Unit
fun SyncOutputStream.write64LE(v: Long): Unit
fun SyncOutputStream.writeF32LE(v: Float): Unit
fun SyncOutputStream.writeF64LE(v: Double): Unit
fun SyncOutputStream.write16BE(v: Int): Unit
fun SyncOutputStream.write24BE(v: Int): Unit
fun SyncOutputStream.write32BE(v: Int): Unit
fun SyncOutputStream.write32BE(v: Long): Unit
fun SyncOutputStream.write64BE(v: Long): Unit
fun SyncOutputStream.writeF32BE(v: Float): Unit
fun SyncOutputStream.writeF64BE(v: Double): Unit
fun SyncOutputStream.writeStream(source: SyncInputStream): Unit
fun SyncOutputStream.writeCharArrayLE(array: CharArray)
fun SyncOutputStream.writeShortArrayLE(array: ShortArray)
fun SyncOutputStream.writeIntArrayLE(array: IntArray)
fun SyncOutputStream.writeLongArrayLE(array: LongArray)
fun SyncOutputStream.writeFloatArrayLE(array: FloatArray)
fun SyncOutputStream.writeDoubleArrayLE(array: DoubleArray)
fun SyncOutputStream.writeCharArrayBE(array: CharArray)
fun SyncOutputStream.writeShortArrayBE(array: ShortArray)
fun SyncOutputStream.writeIntArrayBE(array: IntArray)
fun SyncOutputStream.writeLongArrayBE(array: LongArray)
fun SyncOutputStream.writeFloatArrayBE(array: FloatArray)
fun SyncOutputStream.writeDoubleArrayBE(array: DoubleArray)
// Variable Length
fun SyncOutputStream.writeU_VL(v: Int): Unit
fun SyncOutputStream.writeS_VL(v: Int): Unit
fun SyncOutputStream.writeStringVL(str: String, charset: Charset = UTF8): Unit
SyncStream
class SyncStream(val base: SyncStreamBase, override var position: Long = 0L) : Extra by Extra.Mixin(), Closeable, SyncInputStream, SyncPositionStream, SyncOutputStream, SyncLengthStream {
val available: Long
fun clone() = SyncStream(base, position)
}
open class SyncStreamBase : Closeable, SyncRAInputStream, SyncRAOutputStream, SyncLengthStream {
val smallTemp = ByteArray(16)
fun read(position: Long): Int
}
inline fun <T> SyncStream.keepPosition(callback: () -> T): T
val SyncStream.hasLength: Boolean
val SyncStream.hasAvailable: Boolean
fun SyncStream.toByteArray(): ByteArray
val SyncStream.eof: Boolean
fun SyncStream.readAvailable(): ByteArray
fun SyncStream.writeToAlign(alignment: Int, value: Int = 0)
fun SyncStream.skip(count: Int): SyncStream
fun SyncStream.skipToAlign(alignment: Int)
fun SyncStream.truncate()
fun SyncStream.readStringVL(charset: Charset = UTF8): String
SyncStream Slicing
fun SyncStream.readStream(length: Int): SyncStream
fun SyncStream.readStream(length: Long): SyncStream
fun SyncStream.readSlice(length: Long): SyncStream
fun SyncStream.sliceStart(start: Long = 0L): SyncStream
fun SyncStream.sliceHere(): SyncStream
fun SyncStream.slice(range: IntRange): SyncStream
fun SyncStream.slice(range: LongRange): SyncStream
fun SyncStream.sliceWithBounds(start: Long, end: Long): SyncStream
fun SyncStream.sliceWithSize(position: Long, length: Long): SyncStream
fun SyncStream.sliceWithSize(position: Int, length: Int): SyncStream
class SliceSyncStreamBase(internal val base: SyncStreamBase, internal val baseStart: Long, internal val baseEnd: Long) :
SyncStreamBase()
fun SyncStreamBase.toSyncStream(position: Long = 0L): SyncStream
Creating a SyncStream from a ByteArray or a String
fun ByteArray.openSync(mode: String = "r"): SyncStream
fun String.openSync(charset: Charset = UTF8): SyncStream
FillSyncStream
class FillSyncStreamBase(val fill: Byte, override var length: Long) : SyncStreamBase()
fun FillSyncStream(fillByte: Int = 0, length: Long = Long.MAX_VALUE)
MemorySyncStream
fun MemorySyncStream(data: ByteArray = EMPTY_BYTE_ARRAY)
fun MemorySyncStream(data: ByteArrayBuilder)
inline fun MemorySyncStreamToByteArray(initialCapacity: Int = 4096, callback: SyncStream.() -> Unit): ByteArray
class MemorySyncStreamBase(var data: ByteArrayBuilder) : SyncStreamBase() {
constructor(initialCapacity: Int = 4096)
var ilength: Int
fun checkPosition(position: Long)
}
FastByteArrayInputStream
fun ByteArray.openFastStream(offset: Int = 0): FastByteArrayInputStream
class FastByteArrayInputStream(val ba: ByteArray, var offset: Int = 0) {
val length: Int
val available: Int
val hasMore: Boolean
val eof: Boolean
fun skip(count: Int)
fun skipToAlign(count: Int)
fun readS8(): Int
fun readU8(): Int
fun readS16LE(): Int
fun readS16BE(): Int
fun readU16LE(): Int
fun readU16BE(): Int
fun readS24LE(): Int
fun readS24BE(): Int
fun readU24LE(): Int
fun readU24BE(): Int
fun readS32LE(): Int
fun readS32BE(): Int
fun readU32LE(): Int
fun readU32BE(): Int
fun readF32LE(): Float
fun readF32BE(): Float
fun readF64LE(): Double
fun readF64BE(): Double
fun readBytes(count: Int): ByteArray
fun readShortArrayLE(count: Int): ShortArray
fun readShortArrayBE(count: Int): ShortArray
fun readCharArrayLE(count: Int): CharArray
fun readCharArrayBE(count: Int): CharArray
fun readIntArrayLE(count: Int): IntArray
fun readIntArrayBE(count: Int): IntArray
fun readLongArrayLE(count: Int): LongArray
fun readLongArrayBE(count: Int): LongArray
fun readFloatArrayLE(count: Int): FloatArray
fun readFloatArrayBE(count: Int): FloatArray
fun readDoubleArrayLE(count: Int): DoubleArray
fun readDoubleArrayBE(count: Int): DoubleArray
fun readU_VL(): Int
fun readS_VL(): Int
fun readString(len: Int, charset: Charset = UTF8)
fun readStringz(len: Int, charset: Charset = UTF8): String
fun readStringz(charset: Charset = UTF8): String
fun readStringVL(charset: Charset = UTF8): String
}