You need to enable JavaScript to run this app. Spring使用StreamingResolution返回txt下载时出现多余t、w字符的原因及解决方法
优惠活动
大模型
产品
解决方案
定价
更多

Spring使用StreamingResolution返回txt下载时出现多余t、w字符的原因及解决方法

问题原因

你错误使用了ObjectOutputStream处理纯文本导出:这个类是Java用于对象序列化的工具,写入的内容是携带序列化协议元数据的二进制格式,而非原生字符串内容。你看到的多余字符t、w以及乱码?,本质是序列化元数据被按照UTF-8解析为文本后的结果。
同时你的代码混用了writeObject和writeUTF两种写入方法,两种方法的序列化头格式不同,进一步加剧了内容异常。

修复方案

直接替换序列化输出流为纯文本字节写入逻辑即可,修复后的参考代码如下:

List<String> dataList = (List<String>) parameters.get("myData");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

// 直接按UTF-8编码写入字符串字节,不需要序列化流
for (String s : dataList) {
    outputStream.write(s.trim().getBytes(StandardCharsets.UTF_8));
    outputStream.write("\n".getBytes(StandardCharsets.UTF_8));
}

StreamingResolution streamingResolution = new StreamingResolution("text/plain", new ByteArrayInputStream(outputStream.toByteArray()));
streamingResolution.setCharacterEncoding(CharEncoding.UTF_8);
            
String year = Integer.toString(Integer.parseInt(end.substring(0, 4)));
String day = year + end.substring(4, 6);

outputStream.close();
return streamingResolution.setFilename(day + ".txt");

附带优化了原代码的两处小问题:

  • 移除了循环外多余的空行写入逻辑,避免导出文件首行空行
  • 修复了Integer.parseInt外层多余的左括号语法错误

内容的提问来源于stack exchange,提问作者rubedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:30:05