Java, есть ли способ добавить байтовый массив, используя выходной поток сервлета вместо перезаписи? - PullRequest
0 голосов
/ 24 октября 2018

все.Я использую Apache Poi для генерации файла формата Excel, я не храню его на своем диске, просто байтовый массив, затем я использую outputtream, чтобы записать байтовый массив клиенту, чтобы клиент мог загрузить файл Excel.Примерно так:

OutputStream outputStream = response.getOutputStream();
byte[] fileData = generateDownloadFile(paramters);
outputStream.write(temp);
outputStream.flush();

Однако мне интересно, существует ли метод, позволяющий добавить байтовый массив к клиенту вместо однократной записи, чтобы я мог сгенерировать некоторый байтовый массив и затем очистить их,затем сгенерируйте некоторые и очистите их, и, наконец, закройте соединение.Если при этом используется метод записи outputtream, последний перезаписывает первый.

Зачем мне это нужно?Я просто хочу отправить что-то обратно клиенту в течение короткого времени, если я сгенерирую весь байтовый массив файла excel, а затем сброслю его, соединение может быть уже закрыто и вызвать ошибку 504.

Я пытался:

  • добавить метод в PrintWriter класс.Но это не сработало, поскольку мне нужно отправить байт вместо символа , я не могу открыть файл с помощью MSExcel, когда через PrintWriter.
  • Я также пыталсяиспользуйте гнездо .Но для сокета все равно нужно использовать outputtream, например new Socket().getOutputStream();.

Я специалист по Java, даже не знаком.Может кто-нибудь помочь разобраться?Спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

Выход имеет метод записи для добавления байтов со смещением:

   outputstream.write(bytes, alreadySentSizeInBytes, 
                                          bytes.length);

Пожалуйста, проверьте, работает ли это

...