Я пытаюсь передать большие данные через 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 будет в порядке?
Если да, Где хранятся данные в каналах?
Если нет, я должен передавать на каждый блок размера буфера?