当前位置: 首页 > java >正文

GZip+Base64压缩字符串在ios上解压报错问题解决(安卓、PC模拟器正常)

java这边的压缩代码
引入的是java8 jdk自带的gzip压缩( java.util.zip.GZIPOutputStream)、BASE64Encoder( sun.misc.BASE64Encoder)

public static String compress(String str) {if (str != null && str.length() != 0) {ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = null;try {gzip = new GZIPOutputStream(out);gzip.write(str.getBytes());} catch (IOException e) {log.error("字符串压缩异常!", e);e.printStackTrace();} finally {IoUtil.close(gzip);}return (new BASE64Encoder()).encode(out.toByteArray());} else {return str;}}

小程序的解压代码

	let pakoContent =  uni.base64ToArrayBuffer(content);pakoContent = pako.ungzip(pakoContent, { to: 'string' });return pakoContent

被压缩字符串

物流行业如何应对全球化供应链的挑战?

ios报错信息
在这里插入图片描述
aotb failed : invalid string length 105

经过测试,java端压缩出的结果长度有106,不是4的整数倍

自行查看没有发现明显问题后询问AI查找可能原因
在这里插入图片描述

经过验证,确实sum.misc的base64有问题,更换为java.util下的解决了

修改后的


import cn.hutool.core.io.IoUtil;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class StringCompressUtils {private static final Logger log = LoggerFactory.getLogger(StringCompressUtils.class);public StringCompressUtils() {}public static String compress(String str) {if (str != null && str.length() != 0) {ByteArrayOutputStream out = new ByteArrayOutputStream();GZIPOutputStream gzip = null;try {gzip = new GZIPOutputStream(out);gzip.write(str.getBytes());} catch (IOException e) {log.error("字符串压缩异常!", e);e.printStackTrace();} finally {IoUtil.close(gzip);}return Base64.getEncoder().encodeToString(out.toByteArray());} else {return str;}}public static String uncompress(String compressedStr) {if (compressedStr == null) {return null;} else {byte[] compressed = null;String decompressed = null;GZIPInputStream ginzip = null;ByteArrayInputStream in = null;ByteArrayOutputStream out = new ByteArrayOutputStream();try {compressed = Base64.getDecoder().decode(compressedStr);in = new ByteArrayInputStream(compressed);ginzip = new GZIPInputStream(in);byte[] buffer = new byte[1024];int offset = -1;while((offset = ginzip.read(buffer)) != -1) {out.write(buffer, 0, offset);}decompressed = out.toString();} catch (IOException e) {log.error("字符串解压缩异常!", e);e.printStackTrace();} finally {IoUtil.close(ginzip);IoUtil.close(in);IoUtil.close(out);}return decompressed;}}
}
http://www.xdnf.cn/news/5988.html

相关文章:

  • 服务器中存储空间不足该怎么办?
  • IP协议的特性
  • 大白话解释联邦学习
  • skolelinux系统详解
  • Proxmox VE 8.4.0显卡直通完整指南:NVIDIA Tesla T4 实战
  • 什么是懒加载?
  • 06_java常见集合类底层实现
  • unity 制作某个旋转动画
  • 分割一切(SAM) 论文阅读:Segment Anything
  • 用vue和go实现登录加密
  • 科研领域开源情报应用:从全球信息网络到创新决策
  • 微机原理|| 流水灯实验
  • 两种常见的C语言实现64位无符号整数乘以64位无符号整数的实现方法
  • 【嵌入式】记一次解决VScode+PlatformIO安装卡死的经历
  • Apifox使用方法
  • Xianyu AutoAgent,AI闲鱼客服机器人
  • 无人机信号监测系统技术解析
  • codeforcesE. Anna and the Valentine‘s Day Gift
  • 在 STM32 上使用 register 关键字
  • 部署大模型:解决ollama.service: Failed with result ‘exit-code‘的问题
  • ROS多机集群组网通信(四)——Ubuntu 20.04图形化配置 Ad-Hoc组网通信指南
  • element-plus自动导入插件
  • 使用DevEco Studio性能分析工具高效解决鸿蒙原生应用内存问题
  • python的命令库Envoy
  • 【树莓派4B】对树莓派4B进行换源
  • 关于索引的使用
  • Fiori学习专题四十一:表单控件
  • js中的同步方法及异步方法
  • [中国版 Cursor ]?!CodeBuddy快捷搭建个人展示页面指南
  • 20250513_问题:由于全局Pytorch导致的错误