Spring FileInputStream缓冲区偶尔包含不正确的字符



我在Spring MVC中使用FileInputStream将文件块读取到byte[]缓冲区中。

然后,我将缓冲区写入(使用FileCopyUtils.copy)响应流。

我注意到,写入流的响应(用户收到的内容)看起来与文件相似,但存在瑕疵。

  1. 在文件数据之前,文件顶部有一个"2000"(不带引号)
  2. 这个"2000"字符串偶尔出现在我的整个文件中
  3. 文件以"0"结尾

这些都不存在于正在读取的原始文件中。有人能帮我去掉这些吗?这样我就有了准确的输出流?

下面是我的错误输出的一个例子:

2000
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line o
2000
f data
a line of data
2000
a line of data
a line of data
0

应该是:

a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data
a line of data

谢谢!

我的猜测是,流被指定为分块传输编码,您只需按读取即可

与FileInputStream无关。这是在传输到客户端的过程中发生的。可能是棘轮怪胎建议的分块编码。在客户端使用HttpURLConnection,它将以无形的方式处理它。

你能试试Apache Commons IO中的IOUtils.copy()吗?

IOUtils.copy(new FileInputStream("some.file"), servletResponse.getOutputStream());

很难从代码中判断出来,但在将数据从一个地方复制到另一个地方时,很可能在某个地方出现了错误(索引不匹配/缺少刷新等)。使用现成且经过充分测试的流复制例程来确定问题。

最新更新