URLConnection卡住而不是抛出错误

时间:2011-07-03 12:10:38

标签: java httpurlconnection urlconnection

以下是我的代码。当我运行此代码时,它总是卡住。有时它运行循环100次有时3000.奇怪的是,这不会引发错误它只会被卡住。有人有什么想法吗?

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import us.monoid.web.Resty;


public class Example1 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    // Allow certificates - See http://en.wikibooks.org/wiki/Programming:WebObjects/Web_Services/How_to_Trust_Any_SSL_Certificate
    SSLUtilities.trustAllHostnames( );
    SSLUtilities.trustAllHttpsCertificates() ;

    // Variables
    int i = 0;
    String  askBidURL = "https://www.exchangebitcoins.com/data/depth";

     while(true){ 

       System.out.println("Example 1 - Run #" + i);
       Resty r = new Resty();

       try {String jsonw = r.text(askBidURL).toString();} 
       catch (IOException ex){Logger.getLogger(Example1.class.getName()).log(Level.SEVERE, null, ex); }
       i++;

   }
}
}

1 个答案:

答案 0 :(得分:0)

Resty.text()或其中的调用可能不会足够快地获取数据。

当从HTTPURLConnection的InputStream执行read()操作时(甚至在中间有一个BufferedInputStream)并逐渐将字节追加到String中,我发生了类似的事情。它显然是由于String构建得太慢而无法跟上传入数据造成的。通过优化该循环,问题就消失了。

它将随机发生,大概在100到1000 GET中发生一次;但是当它发生时它会以某种方式破坏以后的连接,即使外部计时器线程close()d卡住了read()的流和连接。

推测性地,如果循环没有足够快地从InputStream中获取数据,那么转换排序似乎有时放弃,因此InputStream的read()永远不会看到零大小的块并且永远不会完成。

不确定你修改图书馆的情绪有多少......