I have an InputStream that I want written to a HttpServletResponse.
There’s this approach, which takes too long due to the use of byte[]
InputStream is = getInputStream();
int contentLength = getContentLength();
byte[] data = new byte[contentLength];
is.read(data);
//response here is the HttpServletResponse object
response.setContentLength(contentLength);
response.write(data);
I was wondering what could possibly be the best way to do it, in terms of speed and efficiency.
Just write in blocks instead of copying it entirely into Java’s memory first. The below basic example writes it in blocks of 10KB. This way you end up with a consistent memory usage of only 10KB instead of the complete content length. Also the enduser will start getting parts of the content much sooner.
As creme de la creme with regard to performance, you could use NIO
Channelsand a directly allocatedByteBuffer. Create the following utility/helper method in some custom utility class, e.g.Utils:Which you then use as below: