Я хочу скачать огромный файл, который уже разбит на сотни сегментов в один файл.
Итак, у меня есть все URL-адреса всех сегментов в массиве, я делю еговручную в 4 секции, запустите 4 потока одновременно, а затем объедините их в один большой файл.Часть, где я думаю, что я могу улучшить свой код, находится в той части, когда я загружаю разделы.Цель состоит в том, чтобы открыть файлы один раз и добавить в них все сегменты.Я открыт для совершенно других решений.
static void downloadFileSection(int begin, int end, int marker, String[] segmentURLs, String segID) {
try(var file = FileChannel.open(Path.of(segID + "_" + marker + ".seg"), WRITE, CREATE)){
var byteArrayHandler = BodyHandlers.ofByteArray();
IntStream.range(begin, end)
.forEach(index -> {
System.out.println("Downloading segment: " + index);
try {
//This is the part that I think is wrong. I shouldn't be creating a ByteBuffer every segment download.
//Main.sendNormalRequest is a method that sends a request using java 11-s HttpClient.send method.
file.write(ByteBuffer.wrap(Main.sendNormalRequest(segmentURLs[index], byteArrayHandler).body()));
} catch (IOException e) {
e.printStackTrace();
}
});
}catch (IOException e) {
e.printStackTrace();
}
}