Hello Team,

Good morning & hope you are doing fine !

I am working on a use-case / concept to generate, download and upload very
large file ( > 1GB file size <100GB) should support both binary and
non-binary file type. To achieve this concept, I tried Camel’s File or
Stream component to read / write file as stream and REST component that
plugins to servlet component which exposes routes as REST endpoint.



The download route designed to searches for given file and once found,
streams the data to target file location ( intermediate step we can ignore)
 as well as http response body. While testing the route using curl tool, we
observed multiple issues as listed below.



   1. Route streams data to client perfectly unless the file size <= 2GB,
   beyond this size the route will throw below error. The exception clearly
   indicates that JVM is trying to allocate an array with the size of about
   2.13 GB and java arrays are limited to max size of array index around 2GB .
   I tried to understand how streams work internally but somehow, I am lost.
   Could you please assist how I can handle this scenario may be read and
   publish data as chucks ?




*java.lang.OutOfMemoryError: Required array length 2147483639 + 9 is too
large at
java.base/jdk.internal.util.ArraysSupport.hugeLength(ArraysSupport.java:649)
*

*at
java.base/jdk.internal.util.ArraysSupport.newLength(ArraysSupport.java:642)
*

*at
java.base/java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:100)
*

*at
java.base/java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:130)*

*at
org.apache.camel.converter.stream.CachedOutputStream.write(CachedOutputStream.java:108)
*

*at java.base/java.io.InputStream.transferTo(InputStream.java:783) at
org.apache.camel.util.IOHelper.copy(IOHelper.java:165)*





   2. How to increase the download rate ? As the file size is large, the
   total time taken to complete the download is very long. I tried with higher
   buffer range for file component & max response size in the servlet consumer
   level but didn’t work.







Could you please assist. Let us know if you need more details form myside.



Thank you,

Karthik Prabhu

Reply via email to