Created
April 4, 2019 10:53
-
-
Save eren/2924b47db28fa18d021777151751176f to your computer and use it in GitHub Desktop.
Zlib Inflate/Decompress in Kotlin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Zlib decompress a file and return its contents | |
| * | |
| * @param filePath absolute path to file | |
| * @return unzipped file contents | |
| */ | |
| fun decompress(filePath: String) : String { | |
| val content = File(filePath).readBytes() | |
| val inflater = Inflater() | |
| val outputStream = ByteArrayOutputStream() | |
| val buffer = ByteArray(1024) | |
| inflater.setInput(content) | |
| while (!inflater.finished()) { | |
| val count = inflater.inflate(buffer) | |
| outputStream.write(buffer, 0, count) | |
| } | |
| outputStream.close() | |
| return outputStream.toString(UTF_8) | |
| } |
In my case inflater.finished() is never true so I do:
/**
* Decompress a byte array using ZLIB.
*
* @return an UTF-8 encoded string.
*/
fun ByteArray.zlib(): String {
val inflater = Inflater()
val outputStream = ByteArrayOutputStream()
return outputStream.use {
val buffer = ByteArray(1024)
inflater.setInput(this)
var count = -1
while (count != 0) {
count = inflater.inflate(buffer)
outputStream.write(buffer, 0, count)
}
inflater.end()
outputStream.toString("UTF-8")
}
}On the Android platform at least, there's InflaterInputStream, allowing for nifty things like InflaterInputStream(inputBytes.inputStream()).bufferedReader().use { it.readText() }
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This helped, thank you!