Канал Java NIO - Куда идут данные? - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь передать большие данные через HttpUrlConnection.

FileInputStream inputStream = new FileInputStream(localFile);
ReadableByteChannel inputChannel = Channels.newChannel(inputStream);
ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);

connection = (HttpURLConnection)(new URL("somewhere").openConnection());

connection.addRequestProperty("Range", "bytes=" + 0 + "-" + (localFile.length() - 1));
connection.setRequestMethod(HttpMethod.PUT.name());
connection.setDoOutput(true);

connection.connect();

WritableByteChannel outputChannel = Channels.newChannel(connection.getOutputStream());
while (inputChannel.read(buffer) > -1) {
    buffer.flip();
    int totalWritten = outputChannel.write(buffer);
    buffer.compact();
}

log.info("total written : {}, {}", accumulate
            , connection.getResponseCode());

connection.disconnect();

Предполагается, что размер локального файла составляет 1 ГБ, а ByteBuffer равен 1 МБ.

Если я помещу все данные локального файла в канал, МОЯ JVM Heap будет в порядке?

Если да, Где хранятся данные в каналах?

Если нет, я должен передавать на каждый блок размера буфера?

...