2012-03-04 3 views
1

Я пытаюсь передать файл непосредственно в веб-службу. Для этого я создал Writer с помощьюНе удалось передать писателю

 URL url = new URL("http://localhost:9200/tree/public/"); 
    URLConnection urlconnection=url.openConnection(); 
    urlconnection.setDoOutput(true); 
    ((HttpURLConnection)urlconnection).setRequestMethod("POST"); 
    ((HttpURLConnection)urlconnection).setRequestProperty("Content-type", "text/html"); 
    Writer out=new OutputStreamWriter(urlconnection.getOutputStream(); 

Далее я продолжаю писать в него данные, как,

while(<Read from file , line>){ 
    out.write(line); 
    out.flush(); 
} 

out.close(); 

Здесь я надеялся, что основная память не будет использоваться для хранения содержимого файла в виде в целом. Внутри будет только одна строка из файла за раз.

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

+1

О какой памяти вы говорите? Будет некоторая неизбежная буферизация под обложками. –

+0

Я говорю о памяти в ГБ. Я не забочусь о небольшой буферизации. ЕСЛИ это «немного» –

+0

Что-то еще не так, если вы видите память в диапазоне GB. Мы не можем сказать более подробно. –

ответ

1

Включение потоковой передачи данных позволило решить проблему. ((HttpURLConnection) urlconnection) .setChunkedStreamingMode (1024 * 1024);