0

下面是我的代码。当我运行此代码时,它总是卡住。有时它会运行循环 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++;

   }
}
}
4

1 回答 1

0

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

当从 HTTPURLConnection 的 InputStream(即使中间有 BufferedInputStream)执行 read() 操作并将字节逐渐附加到 String 时,我遇到过类似的情况。这显然是由于 String 的构建速度太慢而跟不上传入的数据造成的。通过优化该循环,问题就消失了。

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

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

不知道你有多大心情修改你的图书馆......

于 2012-02-05T03:05:57.540 回答