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

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

对于input string <?xml version="1.0" encoding="UTF-8" standalone="no"?><VAST version="2.0">,我得到的是output:�??????????????�����Q(K-*��ϳU2�3PRH�K�O��K�U

我期待输出如下H4sIAAAAAAAAA7Oxr8jNUShLLSrOzM+zVTLUM1BSSM1Lzk/JzEu3VQoNcdO1UFIoLknMS0nMyc9LtVXKy1eyt7MJcwwOQegyAuqyAwB+wzaKSgAAAA==基于这个网站https://www.zickty.com/texttogzip

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

推荐答案

H4sIAAAAAA7Oxr8jNUShLLSrOzM+zVTLUM1BSSM1Lzk/JzEu3VQoNcdO1UFIOLknMS0nMyc9LtVXKy1eyt7MJcwwOQegyAuqyAwB+wzaKsgAAAA==

这是在gzipping已经发生之后以Base64编码编码的.(还要注意,Base64编码比原始字节消耗更多的内存,这可能会比节省的gzipping占用更多的内存.)

代码的输出主要是以原始字节为单位的.将其视为UTF_8字符串可能已损坏它.您要么根本不将其转换回字符串,要么使用Base64将其转换为字符串,并使用java.util.Base64.

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

Android相关问答推荐

Android设备.Net Maui上的mp3文件列表

如何检测HitTest是否命中给定的网格对象?

即使安装了Chrome和YouTube,Android对action_view a YouTube URL的意图也是空的

如何在安卓系统上使用Float16霓虹灯?

请求标头为空/无法通过拦截器获取

登录方法显示为空列表,即使它显示的是Firebase身份验证控制台

在内部创建匿名对象的繁忙循环调用函数会产生开销吗?

没有打开历史记录的活动意向 Select 器完成调用活动

弹出导航堆栈后,Compose 无法访问 Hilt View Model

使用 List 和 LazyColumn 重新组合所有项目

使用 Gadle kotlin 为多模块 Android 代码库设置 jacoco

在 Android 房间迁移中获取上下文

Android:使用依赖项 ViewModelProviderFactory 初始化 ViewModel 的正确方法

我如何比较多个时间范围并在 Android Compose 中并排显示它们

具有数据库和升级潜力的移动应用程序开发(Android)供朋友使用

如何在 Jetpack Compose 中的特定位置绘制图像

在 Kotlin 客户端应用程序中发送 FCM 推送通知 - Firebase 云消息传递

如何将新的 ComponentActivity 与 ViewBinding 和其他旧的 AppCompatActivity 组件一起使用

CenterAlignedTopAppBar 滚动行为:未为参数状态传递值

(Android) 如何在一对多关系中将子 ID 与父级匹配