Загрузка файла по сети - Java heap space

241
24 марта 2018, 16:04

При копировании файла jdk загоняет его полностью в память. Код:

    HttpURLConnection conn = null;
    URL urlSt = new URL(urlString);
    conn = (HttpURLConnection) urlSt.openConnection();
    conn.setDoInput(true);
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "application/octet-stream");
    conn.setRequestMethod("PUT");
    conn.setRequestProperty("Content-Length", Long.toString(fileSize));
    OutputStream out = conn.getOutputStream();
    InputStream in = new FileInputStream(fileName);
    byte[] buf = new byte[1024];
    int len = 0;
    while ((len = in.read(buf)) >0) {
        out.write(buf, 0, len);
    }
    in.close();
    out.close();

В интернете, нашел некоторые варианты решения, но они не помогли, а только начали еще новые, соответствующие им, екзепшины выкидывать.

    conn.setFixedLengthStreamingMode();
    conn.setChunkedStreamingMode();

При тестировании использовались такие данные:

  • 800мб - ОЗУ: 1024Мб = Java heap space;
  • 970Мб - ОЗУ: 2024 = Ок;
  • 1.7Гб - ОЗУ: 6144Мб = Ок;
  • 4.1Гб - ОЗУ: 6144Мб = Java heap space;

ВОПРОС: как оправить большой файл и не получить екзепшн.

READ ALSO
Можно ли изменить цвет WebView?

Можно ли изменить цвет WebView?

Можно ли изменить цвет webview до того, как загрузилась страница? На секунду появляется белый экран, а только потом загружается сайт

207
Аналог типа Variant

Аналог типа Variant

Портирую на Java один протоколСуть протокола: сообщения состоят из двух частей - структура данных и сами данные

150
Как узнать какой метод вызвал текущий метод

Как узнать какой метод вызвал текущий метод

У меня есть в классе ONE два метода А и С, каждый передает свою уникальную строку в метод B, находящийся в классе TWO

169