Java,限制BufferedReader读取时间

标签 java timeout max bufferedreader execution-time

我编写了这段非常经典的代码来读取 URL 的内容。

// Prepares the connection
URL url = new URL(urlString);
URLConnection uc = url.openConnection();

// Reads the data
StringBuilder data;
String inputLine;
try (InputStreamReader isr = new InputStreamReader(uc.getInputStream(), "utf-8");
     BufferedReader in = new BufferedReader(isr)) {
    data = new StringBuilder();
    while ((inputLine = in.readLine()) != null) {
        data.append(inputLine);
    }
}

// Returns the read data
return data.toString();

但有时,我正在读取的网址包含太多数据,或者客户端连接太慢,或者其他什么......所以读取花费了太多时间。

有没有办法为 BufferedReader(或 InputStreamReader,或者 URLConnection?)指定“最大读取时间”?理想情况下,它会在达到“最大读取时间”后抛出 TimeoutException。

我做了一些研究,但我发现的只是接收数据大小的限制,而不是执行时间的限制。

最佳答案

只需在开始读取之前调用 URLConnection.setReadTimeout() 即可。如果超时,将抛出SocketTimeoutException

关于Java,限制BufferedReader读取时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647187/

相关文章:

java - 使用流从列表中获取总和和最大值

r - 在 R 中使用 argmax 或更简单的东西

java - Java 中的非法自引用是什么?

javascript - 为什么 window.open() 会默默地忽略 iff 从循环内并通过 setTimeout() 调用?

java - 在 Spring WebFlux webclient 中设置超时

javascript - 没有setTimeout的vue点击动画

java - 如何在 Json 树中按名称查找节点?

java - 相应地锁定和更新文件

java - java 8中的 optional 不断从类返回toString方法

sql - 如何计算Oracle SQL select中两个数字的最大值?