Довольно много вопросов / ответов, и многие я пытался безуспешно. Я получаю сжатую строку, которая использует MemoryStream и DeflateStream для этого (c#). Следующая функция распаковки прекрасно работает
fun decompress(string: String): String? {
var decompressedString: String? = ""
try {
val bytes: ByteArray = Base64.decode(string, Base64.DEFAULT)
val inflater = Inflater(true)
val outputStream = ByteArrayOutputStream()
val buffer = ByteArray(1024)
inflater.setInput(bytes)
while (!inflater.finished()) {
val count = inflater.inflate(buffer)
outputStream.write(buffer, 0, count)
}
inflater.end()
outputStream.close()
decompressedString = outputStream.toString("UTF8")
} catch (e: IOException) {
e.printStackTrace()
}
return decompressedString
}
. Позже мне нужно сжать данные и отправить их обратно. Попытки сжать данные не увенчались успехом. Сервер постоянно говорит мне, что «длина блока не совпадает с его дополнением». Я использую следующую функцию для сжатия
fun compress(string: String): String? {
var compressedString: String? = null
try {
val bytes: ByteArray = string.toByteArray(charset("UTF-8"))
// Compress the bytes
val deflater = Deflater()
//val outputStream = ByteArrayOutputStream()
val buffer = ByteArray(1024)
deflater.setInput(bytes)
deflater.finish()
deflater.deflate(buffer)
deflater.end()
//outputStream.close()
compressedString = Base64.encodeToString(buffer, Base64.DEFAULT)
} catch (e: IOException) {
e.printStackTrace()
}
return compressedString
}
Проблема не в серверной части, так как она отлично работает с приложением iOS, но не Android. Я попробовал много вариантов всего этого без успеха.
У кого-нибудь есть предложения о том, что я делаю неправильно и что мне нужно сделать, чтобы заставить его работать?
Спасибо ^. ^