2

を使用して収集しているWebサービスの応答として非常に長い文字列を取得していますが、使用したStringBuilder値を完全に取得することはできませんがStringBuffer、成功しませんでした。

これが私が使用しているコードです:

private static String read(InputStream in ) throws IOException {
    //StringBuilder sb = new StringBuilder(1000);
    StringBuffer sb = new StringBuffer();
    String s = "";
    BufferedReader r = new BufferedReader(new InputStreamReader( in ), 1000);
    for (String line = r.readLine(); line != null; line = r.readLine()) {
        sb.append(line);
        s += line;
    } in .close();

    System.out.println("Response from Input Stream Reader >>>" + sb.toString());
    System.out.println("Response from Input S >>>>>>>>>>>>" + s);
    return sb.toString();
}

どんな助けでも大歓迎です。

4

4 に答える 4

3

Stringコンソールに完全に印刷されない場合がありますが、実際にはそこにあります。表示するには、ファイルに保存してください。

于 2012-10-26T11:34:20.750 に答える
3

すべての文字列を表示するために、文字列を文字列の配列に分割することもできます

String delimiter = "put a delimiter here e.g.: \n";
String[] datas=sb.toString().split(delimiter);

for(String string datas){
System.out.println("Response from Input S >>>>>>>>>>>>" + string);
}
于 2012-10-26T11:40:27.560 に答える
1

入力が文字列に対して大きすぎるとは思いませんが、長すぎる行を受け入れないため、コンソールに表示されません。とにかく、これは文字としての非常に巨大な入力に対する解決策です:

private static String[] readHugeStream(InputStream in) throws IOException {
    LinkedList<String> dataList = new LinkedList<>();
    boolean finished = false;
    //
    BufferedReader r = new BufferedReader(new InputStreamReader(in), 0xFFFFFF);
    String line = r.readLine();
    while (!finished) {
        int lengthRead = 0;
        StringBuilder sb = new StringBuilder();
        while (!finished) {
            line = r.readLine();
            if (line == null) {
                finished = true;
            } else {
                lengthRead += line.length();
                if (lengthRead == Integer.MAX_VALUE) {
                    break;
                }
                sb.append(line);
            }
        }
        if (sb.length() != 0) {
            dataList.add(sb.toString());
        }
    }
    in.close();
    String[] data = dataList.toArray(new String[]{});
    ///
    return data;
}

public static void main(String[] args) {
    try {
        String[] data = readHugeStream(new FileInputStream("<big file>"));
    } catch (IOException ex) {
        Logger.getLogger(StackoverflowStringLong.class.getName()).log(Level.SEVERE, null, ex);
    } catch (OutOfMemoryError ex) {
        System.out.println("out of memory...");
    }
}
于 2012-10-26T12:30:32.613 に答える
0

System.out.println() はすべての文字を出力するわけではありません。コンソールに表示できる文字数は限られています。SD カードにファイルを作成し、そこに文字列をテキスト ドキュメントとしてコピーして、正確な応答を確認できます。

 try
                {
                      File root = new File(Environment.getExternalStorageDirectory(), "Responsefromserver");
                      if (!root.exists()) 
                        {
                          root.mkdirs();
                      }
                      File gpxfile = new File(root, "response.txt");
                      FileWriter writer = new FileWriter(gpxfile);
                      writer.append(totalResponse);
                      writer.flush();
                      writer.close();
                  }
                  catch(IOException e)
                  {
                             System.out.println("Error:::::::::::::"+e.getMessage());
                      throw e;

                  }
于 2012-10-26T12:53:25.330 に答える