Строка Kotlin Gzip не работает должным образом

Ниже приведен мой код для сжатия строки

 val bos = ByteArrayOutputStream()
 GZIPOutputStream(bos).bufferedWriter(Charsets.UTF_8).use { it.write(data) }
 String(bos.toByteArray(),Charsets.UTF_8)

Для входной строки <?xml version = "1.0" encoding = "UTF-8" standalone = "no"?><VAST version = "2.0"> на выходе я получаю следующее: �??????????????????������Q(K-*��ϳU2�3PRH�K�O��K�U

Я ожидаю вывода, как показано ниже: H4sIAAAAAAAAA7Oxr8jNUShLLSrOzM+zVTLUM1BSSM1Lzk/JzEu3VQoNcdO1UFIoLknMS0nMyc9LtVXKy1eyt7MJcwwOQegyAuqyAwB+wzaKSgAAAA== на основе этого сайта https://www.zickty.com/text тогзип

Как я могу сжать строку в известном формате символов, используя gzip, как указано выше?

1
0
145
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

H4sIAAAAAAAAA7Oxr8jNUShLLSrOzM+zVTLUM1BSSM1Lzk/JzEu3VQoNcdO1UFIoLknMS0nMyc9LtVXKy1eyt7MJcwwOQegyAuqyAwB+wzaKSgAAAA==

Это кодируется в кодировке Base64 после того, как сжатие уже произошло. (Обратите также внимание, что кодирование Base64 потребует больше памяти, чем необработанные байты, и, возможно, потребует больше памяти, чем сэкономленное gzip.)

Вывод вашего кода находится в необработанных байтах... в основном. Обработка его как строки UTF_8, скорее всего, повредила его. Вам следует либо вообще не преобразовывать его обратно в строку, либо использовать Base64 для преобразования его в строку с помощью java.util.Base64.

Однако обратите внимание, что разные настройки сжатия, даже для одного и того же алгоритма zip, могут привести к разным сжатым выводам. Единственный надежный способ проверки результатов сжатия — последующая распаковка результатов.

Другие вопросы по теме