我想知道在创建一个byte []时是否有特定的规则或最佳实践,其内容被写入ServletOutputStream?
byte[] buffer = new byte[1024];
int r = 0;
try {
in = new BufferedInputStream(new FileInputStream(new File("/path/to/the/some/file")));
sos = response.getOutputStream();
while ((r = in.read(buffer, 0, buffer.length)) != -1) {
sos.write(buffer, 0, r);
在上面的代码中,byte [] lenth是1024.如果我在tomcat中运行我的servlet,我是否需要将缓冲区的长度与tomcat缓冲区的长度相匹配?或者它真的没关系? Tomcat默认缓冲区大小可能是4096,而我的byte []可以说是20000
不确定问题是否有意义,但我看到,因为我在代码中增加了byte [] lenth,我得到indexoutofboundsexception。以前字节[]长度为1Kb,我将其更改为64kb并开始获取indexoutofboundsexception
答案 0 :(得分:2)
你不能忘记缓冲区和易出错的循环,只需调用:
IOUtils.copy(in, response.getOutputStream());
http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html
我知道这不是你问题的答案,但我更喜欢干净且防弹的代码而不是可疑的优化。