Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java inputStream.read无法正常工作_Java_Sockets_Inputstream_Java Io_Outputstream - Fatal编程技术网

Java inputStream.read无法正常工作

Java inputStream.read无法正常工作,java,sockets,inputstream,java-io,outputstream,Java,Sockets,Inputstream,Java Io,Outputstream,我使用以下代码从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.setRequestProper

我使用以下代码从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.
    }
  }
一切正常,代码工作正常。但是,当我将
下载缓冲区大小
的值更改为像
5
这样的小数值时,一件奇怪的事情发生了!当我将
DOWNLOAD\u BUFFER\u SIZE
的值更改为小数值,并关闭internet连接时,下载会持续一段时间,并且不会停止!但是当
DOWNLOAD\u BUFFER\u SIZE
的值很大时,如
10*1024
,一切正常,当我关闭连接时,下载停止

有人能帮我吗?当
download\u BUFFER\u SIZE
的值很小并且我关闭了internet连接时,我希望停止下载

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

EJP的答案不包含解决此问题的解决方案。由于某些原因,我希望下载缓冲区的大小较小

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


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

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

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


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

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

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


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

我将读取超时设置为250、500等,但结果不会改变!!邮报编辑了这篇文章。如果可以,请帮助我。结果是什么?结果应该是您读取缓冲区中的所有数据,然后得到一个
SocketTimeoutException
。对不起,我的英语说得不好。我不想在套接字上设置读取超时。我只想在Downlpad_Buffer_大小很小并且我关闭互联网时停止下载。有什么办法吗?这可能吗?我不明白。为什么要使用小缓冲区?为什么不使用读取超时?在这两种情况下,你只是在做错误的选择。谢谢我将使用一个大的缓冲区。再次感谢。我将readTimeout设置为250、500等,但结果不变!!邮报编辑了这篇文章。如果可以,请帮助我。结果是什么?结果应该是您读取缓冲区中的所有数据,然后得到一个
SocketTimeoutException
。对不起,我的英语说得不好。我不想在套接字上设置读取超时。我只想在Downlpad_Buffer_大小很小并且我关闭互联网时停止下载。有什么办法吗?这可能吗?我不明白。为什么要使用小缓冲区?为什么不使用读取超时?在这两种情况下,你只是在做错误的选择。谢谢我将使用一个大的缓冲区。再次感谢。