以下是我的代码。当我运行此代码时,它总是卡住。有时它运行循环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++;
}
}
}
答案 0 :(得分:0)
Resty.text()或其中的调用可能不会足够快地获取数据。
当从HTTPURLConnection的InputStream执行read()操作时(甚至在中间有一个BufferedInputStream)并逐渐将字节追加到String中,我发生了类似的事情。它显然是由于String构建得太慢而无法跟上传入数据造成的。通过优化该循环,问题就消失了。
它将随机发生,大概在100到1000 GET中发生一次;但是当它发生时它会以某种方式破坏以后的连接,即使外部计时器线程close()d卡住了read()的流和连接。
推测性地,如果循环没有足够快地从InputStream中获取数据,那么转换排序似乎有时放弃,因此InputStream的read()永远不会看到零大小的块并且永远不会完成。
不确定你修改图书馆的情绪有多少......