[英]Java - Why while(true){ inputStream.read(incomingData) } does not work?
[英]inputStream.read does not work correctly
我使用以下代碼從互聯網下載文件。
//suppose I call this method inside main(String[] st) method.
private void download(String link){
URL url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Accept-Encoding", "identity");
connection.setRequestProperty("connection", "close");
connection.connect();
save(connection.getInputStream());
}
private final int DOWNLOAD_BUFFER_SIZE = 10 * 1024;
private void save(InputStream inputStream) {
FileOutputStream fos;
try {
byte[] buffer = new byte[DOWNLOAD_BUFFER_SIZE];
int len;
fos = new FileOutputStream("FILE_PATH");
while ((len = inputStream.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//close streams, flush, etc.
}
}
一切正常,代碼正常運行。 但是,當我將DOWNLOAD_BUFFER_SIZE
的值更改為較小的數字(如5
,會發生奇怪的事情! 當我將DOWNLOAD_BUFFER_SIZE
的值更改為較小的數字時,並且關閉了互聯網連接,下載會持續一段時間並且不會停止! 但是,當DOWNLOAD_BUFFER_SIZE
的值很大,如10 * 1024
,一切正常,當我關閉連接時,下載將停止。
誰能幫我? 我希望在DOWNLOAD_BUFFER_SIZE
的值很小並且停止Internet連接時停止DOWNLOAD_BUFFER_SIZE
。
我看過此鏈接,但沒有幫助。
EJP的答案不包含解決此問題的解決方案。 由於某些原因,我希望DOWNLOAD_BUFFER_SIZE很小。
請幫我。 我需要你的幫助。 請:X
如果我的句子語法不正確,我提前致歉。 因為我的英語說得不好。
由於套接字接收緩沖區。 里面只有那么多。 如果您從中讀取小塊,則需要更多讀取。
我不知道為什么要減小下載緩沖區的大小。 我通常使用4096或8192字節。 除非內核中的套接字接收緩沖區同樣大,否則將其設置為1MB這樣的大值是沒有意義的。
如果您擔心網絡中斷,應該在套接字上設置讀取超時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.