Skip to content

Commit

Permalink
Add CompressionMethod.compress/uncompress with ByteArray to make it m…
Browse files Browse the repository at this point in the history
…ore obvious when starting with the compression method (#2137)
  • Loading branch information
soywiz authored Jan 27, 2024
1 parent 2285b34 commit 11993ae
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
10 changes: 8 additions & 2 deletions korge-core/src/korlibs/io/compression/CompressionMethod.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
10 changes: 9 additions & 1 deletion korge-core/test/korlibs/io/compression/CompressionTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
}
}

0 comments on commit 11993ae

Please sign in to comment.