Hallo Forum
Mit HTTP PUT lade ich einigermassen grosse Dateien (z.B. 300M) auf einen Server. Der Client muss die Datei offenbar im Heap halten, denn mit ansteigender Dateigrösse entdecke ich irgendwann:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
at com.telekurs.finesb.pos.cli.adapter.PosClientAdapter.createPhysRes
und mit einer Erhöhung des Client Heap auf z.B -Xms1024M -Xmx1024M klappt dann der Upload vorerst wieder.
Nun meine Frage:
Ist es mit der java.net.HttpURLConnection möglich, grosse Datenmengen zu streamen, bei konstanter Memory Allokation, und wenn ja, wie geht das? Mein Ziel ist mit einem Client mit z.B. 128 MB max heap eine sehr grosse, nicht vom Client limitierte Anzahl Bytes auf einen Server zu streamen.
Oder liegt mein Problem vielleicht auf dem Server? Der Server hat einen HTTP REST Adapter (JAX-RS /Jersey), um den ich mich vorerst noch nicht gekümmert habe.
Der Client funktioniert so:
Vielen Dank fürs Nachdenken!
Rene
Mit HTTP PUT lade ich einigermassen grosse Dateien (z.B. 300M) auf einen Server. Der Client muss die Datei offenbar im Heap halten, denn mit ansteigender Dateigrösse entdecke ich irgendwann:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2786)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
at com.telekurs.finesb.pos.cli.adapter.PosClientAdapter.createPhysRes
und mit einer Erhöhung des Client Heap auf z.B -Xms1024M -Xmx1024M klappt dann der Upload vorerst wieder.
Nun meine Frage:
Ist es mit der java.net.HttpURLConnection möglich, grosse Datenmengen zu streamen, bei konstanter Memory Allokation, und wenn ja, wie geht das? Mein Ziel ist mit einem Client mit z.B. 128 MB max heap eine sehr grosse, nicht vom Client limitierte Anzahl Bytes auf einen Server zu streamen.
Oder liegt mein Problem vielleicht auf dem Server? Der Server hat einen HTTP REST Adapter (JAX-RS /Jersey), um den ich mich vorerst noch nicht gekümmert habe.
Der Client funktioniert so:
Java:
HttpURLConnection c = openConnection( name );
c.setRequestMethod( "PUT" );
c.setDoOutput( true );
c.connect();
int n = -1;
byte[] ba= new byte[ 1048576 ];
OutputStream os = c.getOutputStream();
while ( ( n = is.read( ba, 0, ba.length ) ) != -1 )
os.write( ba, 0, n );
os.flush();
os.close();
is.close();
Vielen Dank fürs Nachdenken!
Rene