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からread()操作を実行し(途中にBufferedInputStreamがある場合でも)、バイトを徐々に文字列に追加すると、このようなことが起こりました。これは、文字列の構築が遅すぎて、受信データに追いついていないことが原因であると思われます。そのループを最適化することで、問題は解決しました。

これはランダムに発生し、100〜1000GETに約1回発生します。しかし、それが起こったとき、たとえ外部のタイマースレッドがスタックしたread()のストリームと接続をclose()したとしても、それはどういうわけか後の接続を妨害するでしょう。

投機的には、ループがInputStreamからのデータを十分な速度で処理しない場合、転送の種類が諦めることがあるようです。そのため、InputStreamのread()は、ゼロサイズのブロックを認識せず、終了しません。

ライブラリを変更する気分がどれくらいかわからない...

于 2012-02-05T03:05:57.540 に答える