0

サーバーに接続して応答を文字列として返す単純な関数があります。返されるデータのサイズが小さい場合でも、応答が大きい場合は正常に機能します。サーバーによって返された応答文字列を完全に保存せず、文字列を ... で終了します。驚くべきことに、system.out.println は正しい応答を返します。私を助けてください。私は本当に立ち往生しています。

protected String getResponseFromServer(String URLaddress) {

    HttpURLConnection connection = null;
    URL serverAddress = null;
    BufferedReader rd = null;
    StringBuffer sb = new StringBuffer();
    try {
        serverAddress = new URL(URLaddress);
        // set up out communications stuff
        connection = null;
        connection = (HttpURLConnection) serverAddress.openConnection();
        connection.setReadTimeout(20000);
        connection.connect();
        // read the result from the server
        rd = new BufferedReader(new InputStreamReader(
                connection.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            System.out.print(line.trim());
            sb.append(line.trim());
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // close the connection, set all objects to null
        connection.disconnect();
        connection = null;
    }
    return sb.toString();
}
4

2 に答える 2

2

(編集:この回答は、OPが最初に投稿したコードに基づいています。その後、問題のコードを変更するためにOPによって質問が編集されました。)

ここに 1 つのバグがあります。

sb.append(line.trim(), 0, line.length());

line先頭または末尾に空白がある場合、line.length()は よりも大きくなりline.trim().length()ます。この場合、次sb.append()をスローしIndexOutOfBoundsExceptionます。

IndexOutOfBoundsException-startまたはendが負の場合、またはstartより大きいendまたはendより大きい場合s.length()

于 2012-04-11T11:00:57.623 に答える
0

デバッグ中に切り捨てられた文字列 (... で終わる) を取得していますか? System.out.println(sb.toString()); を試してください。戻る前に。

于 2012-04-11T11:28:37.727 に答える