feat: Enhance compression and decompression methods for compatibility with pako library by using RAW deflate/inflate

This commit is contained in:
k1ngsterr1
2026-01-11 03:15:45 +05:00
parent 569127100f
commit d46920675b
2 changed files with 257 additions and 52 deletions

View File

@@ -216,8 +216,17 @@ object CryptoManager {
}
}
/**
* RAW Deflate сжатие (без zlib header)
*
* ⚠️ ВАЖНО: nowrap=true для совместимости с pako.deflate() в JS!
* - pako.deflate() создаёт RAW deflate поток (без 2-byte zlib header)
* - Java Deflater() по умолчанию создаёт zlib поток (с header 78 9C)
* - Поэтому используем Deflater(level, true) где true = nowrap
*/
private fun compress(data: ByteArray): ByteArray {
val deflater = Deflater()
// nowrap=true = RAW deflate (совместимо с pako.deflate)
val deflater = Deflater(Deflater.DEFAULT_COMPRESSION, true)
deflater.setInput(data)
deflater.finish()
@@ -227,12 +236,22 @@ object CryptoManager {
val count = deflater.deflate(buffer)
outputStream.write(buffer, 0, count)
}
deflater.end() // Освобождаем ресурсы
outputStream.close()
return outputStream.toByteArray()
}
/**
* RAW Inflate декомпрессия (без zlib header)
*
* ⚠️ ВАЖНО: nowrap=true для совместимости с pako.inflate() в JS!
* - pako.inflate() ожидает RAW deflate поток
* - Java Inflater() по умолчанию ожидает zlib поток (с header)
* - Поэтому используем Inflater(true) где true = nowrap
*/
private fun decompress(data: ByteArray): ByteArray {
val inflater = Inflater()
// nowrap=true = RAW inflate (совместимо с pako.inflate)
val inflater = Inflater(true)
inflater.setInput(data)
val outputStream = ByteArrayOutputStream()
@@ -241,6 +260,7 @@ object CryptoManager {
val count = inflater.inflate(buffer)
outputStream.write(buffer, 0, count)
}
inflater.end() // Освобождаем ресурсы
outputStream.close()
return outputStream.toByteArray()
}