簡體   English   中英

inputStream.read無法正常工作

[英]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.

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