java - 从 HttpServletRequest 读取 InflaterInputStream 时出现 EOFException
问题描述
我有一个 API,客户端可以通过发送压缩请求向其发出请求。压缩是使用 Deflator 以下方式完成的。
请求有效载荷:
public byte[] compressRequest(String requestString) {
int reqLength = requestString.length();
int temp = (int)(1.001D * (double)reqLength + 1.0D) + 12;
byte[] byteArr = requestString.getBytes("US-ASCII");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(temp);
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream);
deflaterOutputStream.write(byteArr);
deflaterOutputStream.close();
return byteArrayOutputStream.toByteArray();
}
在服务器端,我正在尝试按照以下方式提取和解压缩数据。
相同的代码在基于 Java7 和 Servlet 的应用程序上运行良好。但是在基于 java 8 和 Spring boot 的应用程序中,我java.io.EOFException: Unexpected end of ZLIB input stream
在行出现以下异常inputLine = in.readLine())
@PostMapping(value = "saverecord")
public void hello(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("application/binary");
InflaterInputStream is = InflaterInputStream(request.getInputStream());
String requestXMLStr = extract(is, 0);
ServletOutputStream out = response
.getOutputStream();
// some processing and return response
}
private String extract(InputStream is) throws IOException {
StringBuffer sb = new StringBuffer();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null) {
sb.append(inputLine);
}
return sb.toString();
}
我尝试遵循其他 SO 答案中建议的两件事,但都没有奏效。
InflaterInputStream is = InflaterInputStream(request.getInputStream(), new Inflater(false)); // tried true also
尝试设置编码
BufferedReader in = new BufferedReader(new InputStreamReader(is, "US-ASCII"));
PS:由于某些项目特定的原因,我不能@RequestBody
在项目中使用。
解决方案
推荐阅读
- c# - 如何为剃须刀页面编写扩展方法
- python - 家得宝购买历史下载
- java - 如何在 TextView 中显示 HTML 文本?
- scala - 证明 runtimeClass 满足 Scala 中的 Bound 类型
- docker - Dockerfile:COPY 不起作用(即使他可以找到该文件)
- javascript - 如何开始在 Formio.js 中构建自定义组件?文档在哪里?
- visual-studio - PHP CS Fixer 不会在 Visual Studio Code 中加载 .php-cs 文件
- android - “未解决的参考:数据绑定”
- ruby-on-rails - 如何在 rake 任务中使用 postgres 复制功能?
- wagtail - Wagtail:过滤 PageChooserPanel 中的可用页面