From 11993ae7828c96ee261b5d610904c8ca5430b8d2 Mon Sep 17 00:00:00 2001 From: Carlos Ballesteros Velasco Date: Sat, 27 Jan 2024 22:31:45 +0100 Subject: [PATCH] Add CompressionMethod.compress/uncompress with ByteArray to make it more obvious when starting with the compression method (#2137) --- .../src/korlibs/io/compression/CompressionMethod.kt | 10 ++++++++-- .../test/korlibs/io/compression/CompressionTest.kt | 10 +++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/korge-core/src/korlibs/io/compression/CompressionMethod.kt b/korge-core/src/korlibs/io/compression/CompressionMethod.kt index 57d60b2369..349c689d4c 100644 --- a/korge-core/src/korlibs/io/compression/CompressionMethod.kt +++ b/korge-core/src/korlibs/io/compression/CompressionMethod.kt @@ -59,9 +59,15 @@ fun CompressionMethod.compress(i: SyncInputStream, o: SyncOutputStream, context: compress(i.toAsyncInputStream(), o.toAsyncOutputStream(), context) } -fun ByteArray.uncompress(method: CompressionMethod, outputSizeHint: Int = this.size * 2): ByteArray = MemorySyncStreamToByteArray(outputSizeHint) { method.uncompress(this@uncompress.openSync(), this) } +fun CompressionMethod.compress(bytes: ByteArray, context: CompressionContext = CompressionContext(), outputSizeHint: Int = (bytes.size * 1.1).toInt()): ByteArray = + MemorySyncStreamToByteArray(outputSizeHint) { this@compress.compress(bytes.openSync(), this, context) } +fun CompressionMethod.uncompress(bytes: ByteArray, outputSizeHint: Int = bytes.size * 2): ByteArray = + MemorySyncStreamToByteArray(outputSizeHint) { this@uncompress.uncompress(bytes.openSync(), this) } + +fun ByteArray.uncompress(method: CompressionMethod, outputSizeHint: Int = this.size * 2): ByteArray = + method.uncompress(this, outputSizeHint) fun ByteArray.compress(method: CompressionMethod, context: CompressionContext = CompressionContext(), outputSizeHint: Int = (this.size * 1.1).toInt()): ByteArray = - MemorySyncStreamToByteArray(outputSizeHint) { method.compress(this@compress.openSync(), this, context) } + method.compress(this, context, outputSizeHint) suspend fun AsyncInputStream.uncompressed(method: CompressionMethod, bufferSize: Int = AsyncRingBufferChunked.DEFAULT_MAX_SIZE): AsyncInputStream = method.uncompressStream(this, bufferSize) suspend fun AsyncInputStream.compressed(method: CompressionMethod, context: CompressionContext = CompressionContext(), bufferSize: Int = AsyncByteArrayDequeChunked.DEFAULT_MAX_SIZE): AsyncInputStream = method.compressStream(this, context, bufferSize) diff --git a/korge-core/test/korlibs/io/compression/CompressionTest.kt b/korge-core/test/korlibs/io/compression/CompressionTest.kt index ef4f65bb2d..35c406dbc9 100644 --- a/korge-core/test/korlibs/io/compression/CompressionTest.kt +++ b/korge-core/test/korlibs/io/compression/CompressionTest.kt @@ -2,9 +2,9 @@ package korlibs.io.compression +import korlibs.encoding.* import korlibs.io.async.suspendTest import korlibs.io.compression.deflate.GZIP -import korlibs.encoding.fromBase64 import korlibs.memory.* import kotlin.test.Test import kotlin.test.assertEquals @@ -30,4 +30,12 @@ class CompressionTest { res2.toList().joinToString("") ) } + + @Test + fun test() { + val uncompressedBytes = byteArrayOf(1, 2, 3, 4, 5) + val compressedBytes = GZIP.compress(uncompressedBytes) + val bytes = GZIP.uncompress(compressedBytes) + assertEquals(bytes.hex, uncompressedBytes.hex) + } }