根据此答案,方法HttpURLConnection.setReadTimeout()
允许您设置最大的时间等待服务器到 strong> start 从输入流读取数据 - 如前所述。Oracle:
从返回的阅读中可以抛出sockettimeoutexception 输入流如果读取超时到期,则可以使用数据。 阅读。
它不允许您设置超时以将服务器强制到完成在特定时间内读取数据
我的问题是:
是否有一种方法可以设置超时迫使服务器在指定的时间内完成读取数据,或者根本不可能?
谢谢
您无法根据您的要求,在HttpURLConnection
上设置timeout
。
但是,您可以使用单独的Thread
来减轻情况。
获得ExecutoreService
final ExecutorService executor = Executors.newSingleThreadExecutor();
提交您的Callable<T>
任务,其中T
是从HttpURLConnection
数据流阅读后返回的数据类型。
final Future<T> result = executor.submit(new HttpTask());
您将获得一个Future<T>
,代表您的任务结果。
现在,使用Future#get(long timeout, TimeUnit unit)
方法。
try {
final T value = result.get(10, TimeUnit.SECONDS);
} catch (final TimeoutException e) {
result.cancel(true);
}
在这种情况下,如果超过10秒的过去,将抛出TimeoutException
,您将可以突然结束任务。