inputStream.read 无法正常工作
inputStream.read does not work correctly
y我使用以下代码从 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
这样的小数字时,奇怪的事情发生了!当我将 DOWNLOAD_BUFFER_SIZE
的值更改为较小的数字并关闭 Internet 连接时,下载会继续一段时间并且不会停止!但是当 DOWNLOAD_BUFFER_SIZE
的值像 10 * 1024
一样大时,一切正常,当我关闭连接时下载停止。
谁能帮帮我?我希望在 DOWNLOAD_BUFFER_SIZE
的值较小时停止下载并关闭互联网连接。
我看过 this link 但没有帮助。
EJP 的回答没有包含解决这个问题的方法。由于某些原因,我希望 DOWNLOAD_BUFFER_SIZE 小一些。
请帮帮我。我需要你的帮助。 please:X
如果我的句子语法不正确,我提前道歉。因为我英语说得不好。
因为套接字接收缓冲区。里面只有这么多。如果您从中读取小块,则需要更多读取。
我不知道您为什么希望下载缓冲区的大小较小。我通常使用 4096 或 8192 字节。除非内核中的套接字接收缓冲区同样大,否则将其设置为 1MB 这样大的值是没有意义的。
如果您担心网络中断,您应该在套接字上设置读取超时。
y我使用以下代码从 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
这样的小数字时,奇怪的事情发生了!当我将 DOWNLOAD_BUFFER_SIZE
的值更改为较小的数字并关闭 Internet 连接时,下载会继续一段时间并且不会停止!但是当 DOWNLOAD_BUFFER_SIZE
的值像 10 * 1024
一样大时,一切正常,当我关闭连接时下载停止。
谁能帮帮我?我希望在 DOWNLOAD_BUFFER_SIZE
的值较小时停止下载并关闭互联网连接。
我看过 this link 但没有帮助。
EJP 的回答没有包含解决这个问题的方法。由于某些原因,我希望 DOWNLOAD_BUFFER_SIZE 小一些。
请帮帮我。我需要你的帮助。 please:X
如果我的句子语法不正确,我提前道歉。因为我英语说得不好。
因为套接字接收缓冲区。里面只有这么多。如果您从中读取小块,则需要更多读取。
我不知道您为什么希望下载缓冲区的大小较小。我通常使用 4096 或 8192 字节。除非内核中的套接字接收缓冲区同样大,否则将其设置为 1MB 这样大的值是没有意义的。
如果您担心网络中断,您应该在套接字上设置读取超时。