Байты, которые должны быть записаны в ServletOutPutStream - PullRequest
0 голосов
/ 08 февраля 2011

Мне интересно, существуют ли конкретные правила или рекомендации при создании байта [], содержимое которого записывается в 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);   

В приведенном выше коде длина байта [] равна 1024. ЕслиЯ запускаю свой сервлет в tomcat, мне нужно, чтобы длина буфера соответствовала длине буфера tomcat?Или это не имеет значения?Размер буфера Tomcat по умолчанию может быть 4096, и мой байт [] может быть, скажем, 20000

Не уверен, что вопрос имеет смысл, но я вижу, что с тех пор, как я увеличил длину байта [] в коде, я получаю indexoutofboundsexception,Ранее длина байта [] составляла 1 КБ, я изменил ее на 64 КБ и начал получать indexoutofboundsexception

1 Ответ

2 голосов
/ 08 февраля 2011

Разве вы не можете просто забыть о буфере и подверженном ошибкам цикле и просто вызвать:

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

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

Я знаю, что это не совсем ответ на ваш вопрос, но я предпочитаю чистый и пуленепробиваемый код, а не сомнительную оптимизацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...