MicroUtils/ktor/common/src/mingwX64Main/kotlin/ActualMPPFileInput.kt

34 lines
841 B
Kotlin

package dev.inmo.micro_utils.ktor.common
import dev.inmo.micro_utils.common.MPPFile
import io.ktor.utils.io.bits.Memory
import io.ktor.utils.io.bits.loadByteArray
import io.ktor.utils.io.core.Input
import okio.FileSystem
import okio.Path
private class FileInput(
private val path: Path
) : Input() {
private val openedFile = FileSystem.SYSTEM.openReadOnly(path)
override fun closeSource() {
openedFile.close()
}
override fun fill(destination: Memory, offset: Int, length: Int): Int {
val byteArray = ByteArray(length)
val read = openedFile.read(offset.toLong(), byteArray, 0, length)
destination.loadByteArray(
offset,
byteArray,
count = length
)
return read
}
}
actual fun MPPFile.input(): Input {
return FileInput(this)
}