Skip to content

Commit

Permalink
Improve InputOutputStream interoperability and deprecate redundant me…
Browse files Browse the repository at this point in the history
…thod (#2)
  • Loading branch information
soywiz authored Aug 18, 2024
1 parent 0f5368e commit 1ac6eff
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 24 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/TEST.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ env:
jobs:
test:
strategy:
fail-fast: true # Once working, comment this
#fail-fast: true # Once working, comment this
matrix:
include:
- { outputKey: testMacosIos, os: macos-13, testTask: jvmTest macosX64Test iosX64Test, buildTasks: publishMacosArm64PublicationToMavenLocal }
Expand Down
25 changes: 25 additions & 0 deletions korlibs-io/api/android/korlibs-io.api
Original file line number Diff line number Diff line change
Expand Up @@ -2599,6 +2599,11 @@ public final class korlibs/io/serialization/xml/XmlExtKt {
public static final fun readXml (Lkorlibs/io/file/VfsFile;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public final class korlibs/io/stream/AsyncStreamExt_jvmKt {
public static final fun toAsync (Ljava/io/InputStream;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Long;)Lkorlibs/io/stream/AsyncInputStream;
public static synthetic fun toAsync$default (Ljava/io/InputStream;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Long;ILjava/lang/Object;)Lkorlibs/io/stream/AsyncInputStream;
}

public final class korlibs/io/stream/AsyncStream_fileKt {
public static final fun asVfsFile (Lkorlibs/io/stream/AsyncStream;Ljava/lang/String;)Lkorlibs/io/file/VfsFile;
public static synthetic fun asVfsFile$default (Lkorlibs/io/stream/AsyncStream;Ljava/lang/String;ILjava/lang/Object;)Lkorlibs/io/file/VfsFile;
Expand Down Expand Up @@ -2646,11 +2651,31 @@ public final class korlibs/io/stream/CharReaderFromSyncStreamKt {
public static synthetic fun toCharReader$default ([BLkorlibs/io/lang/Charset;IILjava/lang/Object;)Lkorlibs/io/stream/CharReader;
}

public final class korlibs/io/stream/FileSyncStreamBase : korlibs/io/stream/SyncStreamBase {
public fun <init> (Ljava/io/File;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/io/File;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun close ()V
public final fun getFile ()Ljava/io/File;
public fun getLength ()J
public final fun getMode ()Ljava/lang/String;
public final fun getRa ()Ljava/io/RandomAccessFile;
public fun read (J[BII)I
public fun setLength (J)V
public fun write (J[BII)V
}

public final class korlibs/io/stream/JavaExKt {
public static final fun toSyncInputStream (Ljava/io/InputStream;)Lkorlibs/io/stream/SyncInputStream;
public static final fun toSyncOutputStream (Ljava/io/OutputStream;)Lkorlibs/io/stream/SyncOutputStream;
}

public final class korlibs/io/stream/SyncStreamExt_jvmKt {
public static final fun openSync (Ljava/io/File;Ljava/lang/String;)Lkorlibs/io/stream/SyncStream;
public static synthetic fun openSync$default (Ljava/io/File;Ljava/lang/String;ILjava/lang/Object;)Lkorlibs/io/stream/SyncStream;
public static final fun toInputStream (Lkorlibs/io/stream/SyncStream;)Ljava/io/InputStream;
public static final fun toSyncStream (Ljava/io/InputStream;)Lkorlibs/io/stream/SyncInputStream;
}

public final class korlibs/io/time/TraceTimeKt {
public static final fun getLogger ()Lkorlibs/logger/Logger;
public static final fun getTraceTimes ()Z
Expand Down
25 changes: 18 additions & 7 deletions korlibs-io/src@jvmAndAndroid/korlibs/io/stream/JavaEx.kt
Original file line number Diff line number Diff line change
@@ -1,27 +1,38 @@
package korlibs.io.stream

import java.io.InputStream
import java.io.OutputStream
import java.io.*

fun InputStream.toSyncInputStream(): SyncInputStream {
return object : SyncInputStream {
override fun read(buffer: ByteArray, offset: Int, len: Int): Int {
//println("READ[s]: $len")
return this@toSyncInputStream.read(buffer, offset, len).also {
//println("READ[e]: $len")
}
override fun read(buffer: ByteArray, offset: Int, len: Int): Int = this@toSyncInputStream.read(buffer, offset, len)

override fun read(): Int = this@toSyncInputStream.read()

override fun skip(count: Int) {
this@toSyncInputStream.skip(count.toLong())
}

override fun close() {
this@toSyncInputStream.close()
}
}
}

fun OutputStream.toSyncOutputStream(): SyncOutputStream {
return object : SyncOutputStream {
override fun write(byte: Int) {
this@toSyncOutputStream.write(byte)
}

override fun write(buffer: ByteArray, offset: Int, len: Int) {
//println("WRITE[s]: $len")
return this@toSyncOutputStream.write(buffer, offset, len).also {
this@toSyncOutputStream.flush()
//println("WRITE[e]: $len")
}
}

override fun flush() = this@toSyncOutputStream.flush()
override fun close() = this@toSyncOutputStream.close()
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package korlibs.io.stream

import korlibs.math.*
import java.io.*

class FileSyncStreamBase(val file: java.io.File, val mode: String = "r") : SyncStreamBase() {
Expand All @@ -25,27 +24,15 @@ class FileSyncStreamBase(val file: java.io.File, val mode: String = "r") : SyncS

fun File.openSync(mode: String = "r"): SyncStream = FileSyncStreamBase(this, mode).toSyncStream()

fun InputStream.toSyncStream(): SyncInputStream {
val iss = this
val tempByte = ByteArray(1)
return object : SyncInputStream {
override fun read(buffer: ByteArray, offset: Int, len: Int): Int {
return iss.read(buffer, offset, len)
}

override fun read(): Int {
val size = read(tempByte, 0, 1)
if (size <= 0) return -1
return tempByte[0].unsigned
}
}
}
@Deprecated("Use toSyncInputStream instead", ReplaceWith("openSync(mode)"))
fun InputStream.toSyncStream(): SyncInputStream = toSyncInputStream()

fun SyncStream.toInputStream(): InputStream {
val ss = this
return object : InputStream() {
override fun read(): Int = if (ss.eof) -1 else ss.readU8()
override fun read(b: ByteArray, off: Int, len: Int): Int = ss.read(b, off, len)
override fun available(): Int = ss.available.toInt()
override fun close() = this@toInputStream.close()
}
}

0 comments on commit 1ac6eff

Please sign in to comment.