繁体   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