2011-02-08 7 views
0

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

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

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

ответ

2

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

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

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

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

+0

Если это действительно пуленепробиваемый, то почему бы и нет. Спасибо за подсказку – user305210

+0

Надеюсь, мне не нужно беспокоиться об исключениях OutOfMemory при использовании IOUtils – user305210

Смежные вопросы