android压缩字符串java.util.zip.DataFormatException: stream error

android使用GZipUtils方法进行GZip压缩时候报错

java.util.zip.DataFormatException: stream error


在4.4.4手机回报错,其他手机没问题


解决办法:

gos.finish();
 gos.flush();

去掉其中一个



分析我发送给你的这段脚本后回答我的问题,脚本内容是: import groovy.json.JsonSlurper import java.security.MessageDigest import java.util.UUID import java.util.zip.GZIPOutputStream import java.io.ByteArrayOutputStream import org.apache.jmeter.samplers.Sampler // ===== 1. 获取原始请求体 ===== Sampler sampler = ctx.getCurrentSampler() def originalBody = sampler.getArguments().getArgument(0).getValue() log.info("原始请求体: " + originalBody) // ===== 2. 执行GZIP压缩 ===== def gzipBody = { byte[] requestBytes = originalBody.getBytes("UTF-8") ByteArrayOutputStream out = new ByteArrayOutputStream(requestBytes.length) GZIPOutputStream gzip = new GZIPOutputStream(out) gzip.write(requestBytes) gzip.close() return out.toByteArray() }.call() // 更新请求体为压缩后的内容 sampler.getArguments().getArgument(0).setValue(new String(gzipBody, "ISO-8859-1")) log.info("GZIP压缩完成,请求体大小: ${originalBody.length()} → ${gzipBody.length}") // ===== 3. 签名生成逻辑 ===== // 注意:签名必须使用原始未压缩数据 def jsonSlurper = new JsonSlurper() def params = [:] try { params = jsonSlurper.parseText(originalBody) as Map } catch (Exception e) { log.error("JSON解析失败,使用默认值", e) originalBody = '''{...}''' // 保留您的默认JSON params = jsonSlurper.parseText(originalBody) as Map } // 生成UUID def generatedUuid = UUID.randomUUID().toString().toUpperCase() vars.put("uuid", generatedUuid) // 签名生成函数(修复密钥特殊字符问题) def generateSign(Map params, String uuid, String tokenstu) { // 修复关键点:使用字节数组处理特殊字符密钥 def myKeyBytes = 'fifedu@2014-9999!@#'.getBytes("UTF-8") def values = params.values().collect { (it instanceof String) ? it : it.toString() }.findAll { it } // 使用字节流拼接避免特殊字符问题 def text = values.sort().join('') + tokenstu + uuid ByteArrayOutputStream buffer = new ByteArrayOutputStream() buffer.write(text.getBytes("UTF-8")) buffer.write(myKeyBytes) // 直接添加密钥字节 return MessageDigest.getInstance('MD5').digest(buffer.toByteArray()) .encodeHex().toString() } // 获取token并生成签名 def tokenstu = vars.get('tokenstu') if(tokenstu == null) { log.warn("tokenstu变量未定义,使用空值替代") tokenstu = "" } def sign = generateSign(params, generatedUuid, tokenstu) // 存储变量 vars.putAll([ signstu9: sign, uuid_stu9: generatedUuid, token_stu9: tokenstu, original_request_body: originalBody, gzipped_request_body: new String(gzipBody, "ISO-8859-1") ]) log.info("UUID: ${generatedUuid} | 签名: ${sign}") 问题是:按照脚本中的处理逻辑排序后的map中,键名和键值都参与md5加密了吗?
最新发布
08-27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值