簡體   English   中英

在不使用 RAM 的情況下從 Internet 下載文件並顯示進度條

[英]Download a file from internet without using RAM and show a progress bar

我意識到有幾種方法可以通過互聯網(http)下載文件

如果文件的 URL 是( http://hoge.com/foo.dat ),則起點是:

new URL("http://hoge.com/foo.dat").openStream();

並選擇如何處理 stream。

據我了解,使用BufferedReader是下載它並提供值以顯示下載進度條的方法之一。 但是,它使用 RAM(如果不正確,我很高興..)。

我發現有一種方法可以在不使用 RAM 的情況下進行下載,如下所示:

new FileOutputStream("foo.dat").getChannel()
.transferFrom(
Channels.newChannel(new URL("http://hoge.com/foo.dat").openStream()),
0, Long.MAX__VALUE
);

但在這種情況下,我看不到進度條中顯示的進度。

請告訴我如何在不使用 RAM 的情況下下載文件並顯示進度。

在不使用 RAM 的情況下從 Internet 下載文件

這是一個模糊的規范。 任何下載都會暫時使用至少少量的 memory。 這幾乎是無法避免的,除非你找到一種方法,直接將 stream 字節從網卡存儲到硬盤之類的文件存儲中。 然而,即使是那些通常有一個內部 memory 來存儲數據,在執行寫操作之前。

如果您想避免使用大量 RAM 空間,那么流式傳輸文件是正確的方法。 您正在使用的BufferedReader不會將整個文件存儲到 RAM memory,而只會存儲已經到達但尚未寫入目標的部分。 因此,除非您的 output(硬盤驅動器)阻塞或緩慢,否則 memory 的使用率會很低。

但是,如果您的 output 通道很慢或阻塞,那么您的 memory 可能會運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM