Java inputStream.read无法正常工作
我使用以下代码从internet下载文件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
//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_大小很小并且我关闭互联网时停止下载。有什么办法吗?这可能吗?我不明白。为什么要使用小缓冲区?为什么不使用读取超时?在这两种情况下,你只是在做错误的选择。谢谢我将使用一个大的缓冲区。再次感谢。