feat: Enhance compression and decompression methods for compatibility with pako library by using RAW deflate/inflate
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user