我在Spring MVC中使用FileInputStream将文件块读取到byte[]缓冲区中。
然后,我将缓冲区写入(使用FileCopyUtils.copy)响应流。
我注意到,写入流的响应(用户收到的内容)看起来与文件相似,但存在瑕疵。
- 在文件数据之前,文件顶部有一个"2000"(不带引号)
- 这个"2000"字符串偶尔出现在我的整个文件中
- 文件以"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());
很难从代码中判断出来,但在将数据从一个地方复制到另一个地方时,很可能在某个地方出现了错误(索引不匹配/缺少刷新等)。使用现成且经过充分测试的流复制例程来确定问题。