应该写入ServletOutPutStream的字节

时间:2011-02-08 18:31:18

标签: tomcat

我想知道在创建一个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

1 个答案:

答案 0 :(得分:2)

你不能忘记缓冲区和易出错的循环,只需调用:

IOUtils.copy(in, response.getOutputStream());

http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html

我知道这不是你问题的答案,但我更喜欢干净且防弹的代码而不是可疑的优化。