diff --git a/components/resources/library/src/androidMain/kotlin/org/jetbrains/compose/resources/ResourceReader.android.kt b/components/resources/library/src/androidMain/kotlin/org/jetbrains/compose/resources/ResourceReader.android.kt index 7c1ce6fdbf..972cb39205 100644 --- a/components/resources/library/src/androidMain/kotlin/org/jetbrains/compose/resources/ResourceReader.android.kt +++ b/components/resources/library/src/androidMain/kotlin/org/jetbrains/compose/resources/ResourceReader.android.kt @@ -13,12 +13,32 @@ internal actual fun getPlatformResourceReader(): ResourceReader = object : Resou val resource = getResourceAsStream(path) val result = ByteArray(size.toInt()) resource.use { input -> - input.skip(offset) - input.read(result, 0, size.toInt()) + input.skipBytes(offset) + input.readBytes(result, 0, size.toInt()) } return result } + //skipNBytes requires API 34 + private fun InputStream.skipBytes(offset: Long) { + var skippedBytes = 0L + while (skippedBytes < offset) { + val count = skip(offset - skippedBytes) + if (count == 0L) break + skippedBytes += count + } + } + + //readNBytes requires API 34 + private fun InputStream.readBytes(byteArray: ByteArray, offset: Int, size: Int) { + var readBytes = 0 + while (readBytes < size) { + val count = read(byteArray, offset + readBytes, size - readBytes) + if (count <= 0) break + readBytes += count + } + } + override fun getUri(path: String): String { val classLoader = getClassLoader() val resource = classLoader.getResource(path) ?: run { diff --git a/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceReader.desktop.kt b/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceReader.desktop.kt index 3f9097e520..da70a3899c 100644 --- a/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceReader.desktop.kt +++ b/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceReader.desktop.kt @@ -12,8 +12,8 @@ internal actual fun getPlatformResourceReader(): ResourceReader = object : Resou val resource = getResourceAsStream(path) val result = ByteArray(size.toInt()) resource.use { input -> - input.skip(offset) - input.read(result, 0, size.toInt()) + input.skipNBytes(offset) + input.readNBytes(result, 0, size.toInt()) } return result }