Я пытаюсь реализовать сервлет для потоковой передачи больших объектов:
oracle.sql.BLOB blob = rs.getBLOB('obj');
InputStream in = blob.getBinaryStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
ServletOutputStream out = response.getOutputStream();
int counter=0
while((length=in.read(buffer)) != -1){
out.write(buffer,0,length);
counter++;
if(counter % 10 == 0){
counter=0;
response.flushBuffer();
}
Этот код предполагает отправку данных клиенту по частям. Теперь происходит то, что при потоковой передаче большого объекта (100 МБ) увеличивается объем памяти, и иногда сервер умирает, если выполняется более одной параллельной загрузки / потока.
Почему flushBuffer() не отправляет данные клиенту? Клиент получает всплывающее окно для открытия / сохранения файла только после закрытия ответа.
out.close()? - person andbi   schedule 11.05.2012