代码之家  ›  专栏  ›  技术社区  ›  Hadi

输入流。读取无法正常工作

  •  0
  • Hadi  · 技术社区  · 7 年前

    yI使用以下代码从internet下载文件。

    //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 ,奇怪的事情发生了!当我更改 下载\u BUFFER\u大小 我关掉了我的互联网连接,下载会持续一段时间,不会停止!但当 下载\u BUFFER\u大小 大得像 10 * 1024 ,一切正常,当我关闭连接时,下载停止。

    有人能帮我吗?当 下载\u BUFFER\u大小 很小,我关闭了互联网连接。

    我看到了 this 链接,但没有帮助。

    EJP的答案不包含解决此问题的解决方案。由于某些原因,我希望DOWNLOAD\u BUFFER\u的大小较小。

    请帮帮我。我需要你的帮助。请:X

    如果我的句子语法不正确,我会提前道歉。因为我英语说得不好。

    1 回复  |  直到 7 年前
        1
  •  2
  •   user207421    7 年前

    因为套接字接收缓冲区。里面只有这么多。如果你读一小段,就需要更多的阅读。

    我不知道你为什么希望下载缓冲区的大小变小。我通常使用4096或8192字节。除非内核中的套接字接收缓冲区同样大,否则将其设置为1MB这样的大值是没有意义的。

    如果您担心网络中断,那么应该在套接字上设置读取超时。