2011-06-30 94 views
0

我在Spring MVC中使用FileInputStream将一个文件块读入一个byte []缓冲区。Spring FileInputStream缓冲区偶尔包含不正确的字符

然后我写入(使用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 

谢谢!

回答

2

我的猜测是,流被指定为chunked transfer encoding和你简单的读它是

+0

谢谢。我如何改变这种编码?我目前正在从提琴手测试。是否有需要添加的请求标题?我指定:User-Agent:Fiddler Host:localhost:8443 Content-Length:109 Content-Type:application/x-www-form-urlencoded。 – kmehta

+0

跟进:或者我不需要更改此编码?这只是一个提琴手假阳性?如果我按原样离开编码,我的应用程序是否知道如何处理响应?我正在写一个iOS应用程序,并且想知道NSURLConnection API是否支持这个。似乎应该。无论如何。感谢您的评论。 +1 – kmehta

0

您能否从Apache Commons IO尝试IOUtils.copy()

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

很难从你的代码告诉,但最有可能你有一个错误的地方,而从一个地方将数据复制到另一个(折射率失/缺少冲洗等)使用现成的,并经过严格测试的流复制定期查明问题。

2

没事做的FileInputStream。这在传输到客户端时发生。可能是由棘轮怪胎建议的分块编码。在客户端使用HttpURLConnection,它将无形地处理给你。

+0

+1谢谢。回答棘手的怪胎是第一次,但我很欣赏这种回应。任何熟悉iOS?你知道NSURLConnection是否支持编码类型分块? – kmehta