Kotlin Gzip 字符串未按预期工作

问题描述 投票:0回答:1

以下是我压缩字符串的代码

 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/texttogzip

如何使用上述 gzip 压缩已知字符格式的字符串?

android string kotlin compression gzip
1个回答
0
投票

H4sIAAAAAAAAA7Oxr8jNUShLLSrOzM+zVTLUM1BSSM1Lzk/JzEu3VQoNcdO1UFIoLknMS0nMyc9LtVXKy1eyt7MJcwwOQegyAuqyAwB+wzaKSgAAAA==

这是在 gzip 压缩之后以 Base64 编码进行编码的。 (另请注意,Base64 编码将比原始字节消耗更多内存,可能比 gzip 节省的内存消耗更多。)

代码的输出大部分是原始字节。将其视为 UTF_8 字符串可能会损坏它。您根本不应该将其转换回字符串,或者使用 Base64 将其转换为字符串,即 java.util.Base64。

但还要注意,即使对于相同的 zip 算法,不同的压缩设置也可能会导致不同的压缩输出。验证压缩结果的唯一可靠方法是事后解压缩结果。

© www.soinside.com 2019 - 2024. All rights reserved.